Professional Documents
Culture Documents
View
View
htm
Create view based on aggregate function
SQL> CREATE TABLE CUSTOMERS (
2
ID INT
NOT NULL,
3
NAME VARCHAR (10)
NOT NULL,
4
AGE INT
NOT NULL,
5
ADDRESS CHAR (10) ,
6
SALARY DECIMAL (6, 2),
7
PRIMARY KEY (ID));
Table created.
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
INSERT ALL
INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 )
INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 )
INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2200.00 )
INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 )
INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 )
INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 )
INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (7, 'nazim', 32, 'dhaka', 2500.00 )
INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (8, 'sumon', 25, 'sandwip', 1800.00 )
INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (9, 'rajib', 23, 'chittagong', 2900.00 )
INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (10, 'karim', 20, 'Kota', 3000.00 )
INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (11, 'jashim', 21, 'Mumbai', 2800.00 )
INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (12, 'roton', 29, 'Bhopal', 2500.00 )
INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (13, 'misu', 20, 'MP', 7500.00 )
SELECT * FROM dual;
13 rows created.
SQL> select * from customers;
ID
---------1
2
3
4
5
6
7
8
9
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Ramesh
32 Ahmedabad
2000
Khilan
25 Delhi
1500
kaushik
23 Kota
2200
Chaitali
25 Mumbai
6500
Hardik
27 Bhopal
8500
Komal
22 MP
4500
nazim
32 dhaka
2500
sumon
25 sandwip
1800
rajib
23 chittagong
2900
10 karim
11 jashim
ID
---------12
13
20 Kota
21 Mumbai
3000
2800
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------roton
29 Bhopal
2500
misu
20 MP
7500
13 rows selected.
==============================================================
SQL> CREATE VIEW zak_view
2 AS SELECT id,name,age,salary
3 FROM customers;
View created.
SQL> select * from zak_view;
ID
---------1
2
3
4
5
6
7
8
9
10
11
NAME
AGE
SALARY
---------- ---------- ---------Ramesh
32
2000
Khilan
25
1500
kaushik
23
2200
Chaitali
25
6500
Hardik
27
8500
Komal
22
4500
nazim
32
2500
sumon
25
1800
rajib
23
2900
karim
20
3000
jashim
21
2800
ID
---------12
13
NAME
AGE
SALARY
---------- ---------- ---------roton
29
2500
misu
20
7500
13 rows selected.
==============================================================
SQL> INSERT INTO v_view
2 VALUES ('nazim',25,4850);
INSERT INTO v_view
*
ERROR at line 1:
ORA-01400: cannot insert NULL into ("SCOTT"."CUSTOMERS"."ID")
SQL> INSERT INTO v_view
2 VALUES (14,'nazim',25,4850);
INSERT INTO v_view
*
ERROR at line 1:
ORA-00913: too many values
NAME
AGE
SALARY
---------- ---------- ---------Chaitali
25
6500
Hardik
27
8500
Komal
22
4500
misu
20
7500
NAME
AGE
SALARY
---------- ---------- ---------Chaitali
25
6500
Hardik
27
8500
Komal
22
4500
misu
20
7500
karim
20
4150
ID
---------1
2
3
4
5
6
7
8
9
10
11
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Ramesh
32 Ahmedabad
2000
Khilan
25 Delhi
1500
kaushik
23 Kota
2200
Chaitali
25 Mumbai
6500
Hardik
27 Bhopal
8500
Komal
22 MP
4500
nazim
32 dhaka
2500
sumon
25 sandwip
1800
rajib
23 chittagong
2900
karim
20 Kota
3000
jashim
21 Mumbai
2800
ID
---------12
13
14
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------roton
29 Bhopal
2500
misu
20 MP
7500
karim
20
4150
14 rows selected.
N.B : When you insert into a view ,it also be insert in the main table.
::: UPDATE ::::
===============
SQL> CREATE VIEW v_view2
2 AS SELECT ID,NAME,AGE,ADDRESS,SALARY
3
FROM customers
4
WHERE ID BETWEEN 1 AND 5
5 WITH CHECK OPTION CONSTRAINT V_VIEW2;
View created.
SQL> SELECT * FROM V_VIEW2;
ID
---------1
2
3
4
5
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Ramesh
32 Ahmedabad
2000
Khilan
25 Delhi
1500
kaushik
23 Kota
2200
Chaitali
25 Mumbai
6500
Hardik
27 Bhopal
8500
2
3
4
5
Khilan
kaushik
Chaitali
Hardik
25
23
25
27
Delhi
Kota
Mumbai
Bhopal
1500
2200
6500
8500
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Ramesh
32 Ahmedabad
5000
Khilan
25 Delhi
1500
kaushik
23 Kota
2200
Chaitali
25 Mumbai
6500
Hardik
27 Bhopal
8500
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Ramesh
32 Ahmedabad
5000
Khilan
25 Delhi
1500
kaushik
23 Kota
2200
Chaitali
25 Mumbai
6500
Hardik
27 Bhopal
8500
Komal
22 MP
4500
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Ramesh
32 Ahmedabad
5000
Khilan
25 Delhi
1500
kaushik
23 Kota
2200
Chaitali
25 Mumbai
6500
Hardik
27 Bhopal
8500
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Ramesh
32 Ahmedabad
5000
Khilan
25 Delhi
1500
kaushik
23 Kota
2200
Chaitali
25 Mumbai
6500
Hardik
27 Bhopal
8500
6 Komal
7 nazim
22 MP
32 dhaka
4500
2500
7 rows selected.
N.B : ID 6 & 7 not update because,A check constraint violation (UPDATE,WHERE ID
BETWEEN 1 AND 5 (WITH CHECK OPTION CONSTRAINT V_VIEW2))
SQL> UPDATE v_view2
2 SET salary=4000
3
WHERE id=2;
1 row updated.
SQL> select * from v_view2;
ID
---------1
2
3
4
5
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Ramesh
32 Ahmedabad
5000
Khilan
25 Delhi
4000
kaushik
23 Kota
2200
Chaitali
25 Mumbai
6500
Hardik
27 Bhopal
8500
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Ramesh
32 Ahmedabad
5000
Khilan
25 Delhi
4000
kaushik
23 Kota
2200
Chaitali
25 Mumbai
6500
Hardik
27 Bhopal
8500
Komal
22 MP
4500
nazim
32 dhaka
2500
7 rows selected.
N.B : When you UPDATE into a view ,it also be UPDATE in the main table.
:::: DELETE ::::
================
SQL> CREATE VIEW v_view3
2 AS SELECT id,name,age,salary
3
FROM customers
4
WHERE id BETWEEN 6 AND 10
5 WITH CHECK OPTION CONSTRAINT v_view3;
View created.
SQL> select * from v_view3;
ID NAME
AGE
SALARY
---------6
7
8
9
10
NAME
AGE
SALARY
---------- ---------- ---------nazim
32
2500
sumon
25
1800
rajib
23
2900
karim
20
3000
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Chaitali
25 Mumbai
6500
Hardik
27 Bhopal
8500
nazim
32 dhaka
2500
sumon
25 sandwip
1800
rajib
23 chittagong
2900
karim
20 Kota
3000
6 rows selected.
::: READ ONLY ::::
==================
SQL> CREATE VIEW v_view4
2 AS SELECT id,name,age,salary
3
FROM customers
4
WHERE salary > 5000
5 WITH CHECK OPTION CONSTRAINT v_view4;
View created.
SQL> select * from v_view4;
ID
---------4
5
13
NAME
AGE
SALARY
---------- ---------- ---------Chaitali
25
6500
Hardik
27
8500
misu
20
7500
1 row deleted.
SQL> select * from v_view4;
ID
---------4
13
NAME
AGE
SALARY
---------- ---------- ---------Chaitali
25
6500
misu
20
7500
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------kaushik
23 Kota
2200
Chaitali
25 Mumbai
6500
nazim
32 dhaka
2500
NAME
AGE
SALARY
---------- ---------- ---------Ramesh
32
2000
Khilan
25
1500
kaushik
23
2200
Chaitali
25
6500
Hardik
27
8500
Komal
22
4500
nazim
32
2500
sumon
25
1800
rajib
23
2900
karim
20
3000
jashim
21
2800
ID
---------12
13
NAME
AGE
SALARY
---------- ---------- ---------roton
29
2500
misu
20
7500
13 rows selected.
SQL> INSERT INTO view_read_only
2 VALUES (14,'zak',26,3000);
INSERT INTO view_read_only
*
ERROR at line 1:
ORA-01733: virtual column not allowed here
SQL> UPDATE view_read_only
2 SET salary=9000
3
WHERE ID=13;
SET salary=9000
*
ERROR at line 2:
ORA-01733: virtual column not allowed here
SQL> DELETE view_read_only
2 WHERE ID=13;
DELETE view_read_only
*
ERROR at line 1:
ORA-01752: cannot delete from view without exactly one key-preserved table
SQL> DELETE FROM view_read_only
2 WHERE ID=13;
DELETE FROM view_read_only
*
ERROR at line 1:
ORA-01752: cannot delete from view without exactly one key-preserved table
Using ALIAS try to AVOID insert is possible in main TABLE
==========================================================
SQL> CREATE VIEW v_view5
2 AS SELECT id NO,name ename,age,salary sal
3
FROM customers
4
WHERE salary > 5000
5 WITH CHECK OPTION CONSTRAINT v_view5;
View created.
SQL> select * from v_view5;
NO
---------4
13
ENAME
AGE
SAL
---------- ---------- ---------Chaitali
25
6500
misu
20
7500
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Ramesh
32 Ahmedabad
5000
Khilan
25 Delhi
4000
kaushik
23 Kota
2200
Chaitali
25 Mumbai
6500
nazim
32 dhaka
2500
sumon
25 sandwip
1800
rajib
23 chittagong
2900
karim
20 Kota
3000
jashim
21 Mumbai
2800
roton
29 Bhopal
2500
misu
20 MP
7500
ID NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------- ---------14 karim
20
4150
12 rows selected.
INSERT :
========
SQL> insert into v_view5 values (15,'dalim',21,5100);
1 row created.
SQL> select * from v_view5;
NO
---------4
13
15
ENAME
AGE
SAL
---------- ---------- ---------Chaitali
25
6500
misu
20
7500
dalim
21
5100
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Chaitali
25 Mumbai
6500
misu
20 MP
7500
dalim
21
5100
UPDATE :
========
SQL> UPDATE v_view5
2 SET sal=9000
3 WHERE no=4;
1 row updated.
SQL> select * from v_view5;
NO
---------4
13
15
ENAME
AGE
SAL
---------- ---------- ---------Chaitali
25
9000
misu
20
7500
dalim
21
5100
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Chaitali
25 Mumbai
9000
misu
20 MP
7500
dalim
21
5100
DELETE :
========
SQL> DELETE v_view5
2 WHERE no=13;
1 row deleted.
SQL> select * from v_view5;
NO
---------4
15
ENAME
AGE
SAL
---------- ---------- ---------Chaitali
25
9000
dalim
21
5100
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Chaitali
25 Mumbai
9000
dalim
21
5100
OR,
SQL> DELETE from v_view5
2 WHERE no=15;
1 row deleted.
SQL> select * from v_view5;
NO ENAME
AGE
SAL
---------- ---------- ---------- ---------4 Chaitali
25
9000
SQL> select * from customers where salary > 5000;
ID NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------- ---------4 Chaitali
25 Mumbai
9000
==========================================================
SQL> select * from customers;
ID
---------1
2
3
4
5
6
7
8
9
10
11
NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Ramesh
32 Ahmedabad
2000
Khilan
25 Delhi
1500
kaushik
23 Kota
2200
Chaitali
25 Mumbai
6500
Hardik
27 Bhopal
8500
Komal
22 MP
4500
nazim
32 dhaka
2500
sumon
25 sandwip
1800
rajib
23 chittagong
2900
karim
20 Kota
3000
jashim
21 Mumbai
2800
ID NAME
AGE ADDRESS
SALARY
NAME
AGE
SALARY
---------- ---------- ---------Ramesh
32
2000
Khilan
25
1500
kaushik
23
2200
Chaitali
25
6500
Hardik
27
8500
Komal
22
4500
nazim
32
2500
sumon
25
1800
rajib
23
2900
karim
20
3000
jashim
21
2800
ID
---------12
13
NAME
AGE
SALARY
---------- ---------- ---------roton
29
2500
misu
20
7500
13 rows selected.
SQL> CREATE TABLE customers_from_view
2 AS SELECT *
3
FROM zak_view;
Table created.
N.B : A table created (customers_from_view) same as VIEW (zak_view).
SQL> SELECT * FROM customers_from_view;
ID
---------1
2
3
4
5
6
7
8
9
10
11
NAME
AGE
SALARY
---------- ---------- ---------Ramesh
32
2000
Khilan
25
1500
kaushik
23
2200
Chaitali
25
6500
Hardik
27
8500
Komal
22
4500
nazim
32
2500
sumon
25
1800
rajib
23
2900
karim
20
3000
jashim
21
2800
ID
---------12
13
NAME
AGE
SALARY
---------- ---------- ---------roton
29
2500
misu
20
7500
13 rows selected.
SQL> INSERT INTO zak_view
2 VALUES (14,'zakiya',26,9000);
1 row created.
N.B : Insert a row in the view (zak_view)
SQL> select * from zak_view;
ID
---------1
2
3
4
5
6
7
8
9
10
11
NAME
AGE
SALARY
---------- ---------- ---------Ramesh
32
2000
Khilan
25
1500
kaushik
23
2200
Chaitali
25
6500
Hardik
27
8500
Komal
22
4500
nazim
32
2500
sumon
25
1800
rajib
23
2900
karim
20
3000
jashim
21
2800
ID
---------12
13
14
NAME
AGE
SALARY
---------- ---------- ---------roton
29
2500
misu
20
7500
zakiya
26
9000
14 rows selected.
N.B : A single row insert in the view (zak_view) table.
SQL> select * from customers;
ID
---------1
2
3
4
5
6
7
8
9
10
11
NAME
AGE ADDRESS
SAL
---------- ---------- ---------- ------Ramesh
32 Ahmedabad
2
Khilan
25 Delhi
1
kaushik
23 Kota
2
Chaitali
25 Mumbai
6
Hardik
27 Bhopal
8
Komal
22 MP
4
nazim
32 dhaka
2
sumon
25 sandwip
1
rajib
23 chittagong
2
karim
20 Kota
3
jashim
21 Mumbai
2
ID NAME
AGE ADDRESS
SAL
---------- ---------- ---------- ---------- -------
12 roton
13 misu
14 zakiya
29 Bhopal
20 MP
26
2
7
9
14 rows selected.
N.B : A single row insert in the main table (customers) table.
SQL> select * from customers_from_view;
ID
---------1
2
3
4
5
6
7
8
9
10
11
NAME
AGE
SALARY
---------- ---------- ---------Ramesh
32
2000
Khilan
25
1500
kaushik
23
2200
Chaitali
25
6500
Hardik
27
8500
Komal
22
4500
nazim
32
2500
sumon
25
1800
rajib
23
2900
karim
20
3000
jashim
21
2800
ID
---------12
13
NAME
AGE
SALARY
---------- ---------- ---------roton
29
2500
misu
20
7500
13 rows selected.
N.B : But that row not added/insert in the customers_from_view.