Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 14

http://www.java2s.com/Tutorial/Oracle/0160__View/Catalog0160__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

SQL> INSERT INTO v_view (id,name,age,salary)


2 VALUES (14,'nazim',25,4850);
INSERT INTO v_view (id,name,age,salary)
*
ERROR at line 1:
ORA-00904: "ID": invalid identifier
==============================================================
::: INSERT ::::
===============
SQL> CREATE VIEW v_view1
2 AS SELECT id,name,age,salary
3
FROM customers
4
WHERE salary >4000
5 WITH CHECK OPTION CONSTRAINT con_view1;
View created.
SQL> select * from v_view1;
ID
---------4
5
6
13

NAME
AGE
SALARY
---------- ---------- ---------Chaitali
25
6500
Hardik
27
8500
Komal
22
4500
misu
20
7500

SQL> insert into v_view1


2 values (14,'karim',20,4150);
1 row created.
SQL> insert into v_view1
2 values (15,'karim1',20,3150);
insert into v_view1
*
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
N.B : A check constraint violation (Where salary >4000 (WITH CHECK OPTION CONSTR
AINT con_view1))
SQL> select * from v_view1;
ID
---------4
5
6
13
14

NAME
AGE
SALARY
---------- ---------- ---------Chaitali
25
6500
Hardik
27
8500
Komal
22
4500
misu
20
7500
karim
20
4150

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
---------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

SQL> UPDATE v_view2


2 SET salary=5000
3
WHERE id=1;
1 row updated.
SQL> SELECT * FROM V_VIEW2;
ID NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------- ---------1 Ramesh
32 Ahmedabad
5000

2
3
4
5

Khilan
kaushik
Chaitali
Hardik

25
23
25
27

Delhi
Kota
Mumbai
Bhopal

1500
2200
6500
8500

SQL> UPDATE v_view2


2 SET salary=3000
3
WHERE id=6;
0 rows updated.
SQL> select * from v_view2;
ID
---------1
2
3
4
5

NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Ramesh
32 Ahmedabad
5000
Khilan
25 Delhi
1500
kaushik
23 Kota
2200
Chaitali
25 Mumbai
6500
Hardik
27 Bhopal
8500

SQL> select * from customers where id between 1 and 6;


ID
---------1
2
3
4
5
6

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

SQL> UPDATE v_view2


2 SET salary=5000
3
WHERE id=7;
0 rows updated.
SQL> select * from v_view2;
ID
---------1
2
3
4
5

NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------Ramesh
32 Ahmedabad
5000
Khilan
25 Delhi
1500
kaushik
23 Kota
2200
Chaitali
25 Mumbai
6500
Hardik
27 Bhopal
8500

SQL> select * from customers where id between 1 and 7;


ID
---------1
2
3
4
5

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

SQL> select * from customers where id between 1 and 7;


ID
---------1
2
3
4
5
6
7

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

---------- ---------- ---------Komal


22
4500
nazim
32
2500
sumon
25
1800
rajib
23
2900
karim
20
3000

SQL> DELETE v_view3


2 WHERE id=6;
1 row deleted.
SQL> select * from v_view3;
ID
---------7
8
9
10

NAME
AGE
SALARY
---------- ---------- ---------nazim
32
2500
sumon
25
1800
rajib
23
2900
karim
20
3000

SQL> select * from customers where id between 4 and 10;


ID
---------4
5
7
8
9
10

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

SQL> DELETE v_view4


2 WHERE id=5;

1 row deleted.
SQL> select * from v_view4;
ID
---------4
13

NAME
AGE
SALARY
---------- ---------- ---------Chaitali
25
6500
misu
20
7500

SQL> select * from customers where id between 3 and 7;


ID
---------3
4
7

NAME
AGE ADDRESS
SALARY
---------- ---------- ---------- ---------kaushik
23 Kota
2200
Chaitali
25 Mumbai
6500
nazim
32 dhaka
2500

SQL> CREATE VIEW view_read_only


2 AS SELECT id,name,age,salary
3
FROM customers
4 WITH READ ONLY CONSTRAINT view_read_only;
View created.
SQL> select * from view_read_only;
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 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

SQL> select * from customers;


ID
---------1
2
3
4
7
8
9
10
11
12
13

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

SQL> select * from customers where salary > 5000;


ID
---------4
13
15

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

SQL> select * from customers where salary > 5000;


ID
---------4
13
15

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

SQL> select * from customers where salary > 5000;


ID
---------4
15

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

---------- ---------- ---------- ---------- ---------12 roton


29 Bhopal
2500
13 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> 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.

You might also like