共計(jì) 4066 個(gè)字符,預(yù)計(jì)需要花費(fèi) 11 分鐘才能閱讀完成。
這篇文章主要介紹了 Oracle 中數(shù)據(jù)庫(kù)對(duì)象視圖怎么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
– 常見(jiàn)的數(shù)據(jù)庫(kù)對(duì)象:
對(duì)象描述表基本的數(shù)據(jù)存儲(chǔ)集合,由行和列組成視圖從表中抽取的邏輯上相關(guān)的數(shù)據(jù)集合序列提供有規(guī)律的數(shù)值索引提高查詢的效率同義詞給對(duì)象起的別名 1、Oracle 的視圖介紹和創(chuàng)建 a、什么是視圖?
視圖是一個(gè)虛擬的表,視圖建立在已有表的基本上,視圖賴以建立的這些表稱之為基表。
向視圖提供數(shù)據(jù)內(nèi)容的語(yǔ)句稱之為 SELECT 語(yǔ)句。
b、為什么要使用視圖?
主要出于兩個(gè)原因:
1、安全原因,限制數(shù)據(jù)訪問(wèn);2、視圖可使復(fù)雜的查詢易于理解和使用。
c、視圖的分類
視圖分為簡(jiǎn)單視圖、復(fù)雜視圖、連接視圖、只讀視圖:
1、簡(jiǎn)單視圖只從單表里獲取數(shù)據(jù);不包含函數(shù)和數(shù)據(jù)組。
2、復(fù)雜視圖從多表獲取數(shù)據(jù);包含函數(shù)和數(shù)據(jù)組。
3、連接視圖是指基于多個(gè)表建立的視圖,使用連接視圖能夠簡(jiǎn)化連接查詢。
4、只讀視圖只允許使用 select 語(yǔ)句,不允許其他 DML 語(yǔ)句的操作。
附加說(shuō)明:DML(data manipulation language):它們是 SELECT、UPDATE、INSERT、DELETE,就象它的名字一樣,這 4 條命令是用來(lái)對(duì)數(shù)據(jù)庫(kù)里的數(shù)據(jù)進(jìn)行操作的語(yǔ)言。
d、如何創(chuàng)建視圖?
創(chuàng)建視圖的語(yǔ)法格式:CREATE [OR REPLACE] VIEW view [(alias[, alias]…)] AS subquery [WITH CHECK OPTION [ CONSTRAINT constraint]] [WITH READ ONLY];
需要注意的是,Oracle 數(shù)據(jù)庫(kù)用戶必須具有 CREATRE VIEW 權(quán)限才能夠創(chuàng)建視圖。
簡(jiǎn)單視圖的創(chuàng)建示例:
建立用于查詢員工號(hào)、姓名、工資的視圖。
SQL conn sys/02000059 as sysdba;
SQL grant create view to scott;
授權(quán)成功。SQL conn scott/02000059
SQL create VIEW emp_view AS select empno, ename, sal FROM emp;
視圖已創(chuàng)建。
視圖是一張?zhí)摂M的表,和表一樣,可以通過(guò) SELECT 語(yǔ)句進(jìn)行查詢。
SQL select * from emp_view;
EMPNO ENAME SAL
7951 EASON 3000
7369 G_EASON 800
7499 ALLEN 1600
......
7900 JAMES 950
7902 FORD 3000
7934 MILLER 1300
已選擇 15 行。
在創(chuàng)建視圖時(shí)可以修改列的名稱。
SQL create VIEW emp_view2(員工號(hào), 員工名,工資) AS select empno, ename, sal FROM emp;
視圖已創(chuàng)建。 SQL select * from emp_view2;
員工號(hào) 員工名 工資
7951 EASON 3000
7369 G_EASON 800
7499 ALLEN 1600
7521 WARD 1250
......
7876 ADAMS 1100
7900 JAMES 950
7902 FORD 3000
7934 MILLER 1300
已選擇 15 行。
創(chuàng)建連接視圖示例:
建立用于獲取部門(mén)號(hào)為 10 的部門(mén)號(hào)、部門(mén)名稱以及員工信息。
SQL CREATE VIEW dept_emp_view AS SELECT d.deptno, d.dname, e.empno, e.ename, e.job FROM dept d, emp e WHERE d.deptno = e.deptno AND d.deptno = 10;
視圖已創(chuàng)建。 SQL select * from dept_emp_view;
DEPTNO DNAME EMPNO ENAME JOB
10 ACCOUNTING 7782 CLARK MANAGER
10 ACCOUNTING 7839 KING PRESIDENT
10 ACCOUNTING 7934 MILLER CLERK
只讀視圖示例:建立查看 10 號(hào)部門(mén)員工信息的視圖。
SQL CREATE VIEW emp_view3 AS select * from emp where deptno = 10 with read only;
視圖已創(chuàng)建。SQL update emp_view3 set sal = sal + 50;
update emp_view3 set sal = sal + 50
第 1 行出現(xiàn)錯(cuò)誤:
ORA-42399: 無(wú)法對(duì)只讀視圖執(zhí)行 DML 操作
2、Oracle 視圖的查詢修改與刪除 a、視圖上的 DML 操作
查詢視圖 -select,如:select * from emp_view;
添加數(shù)據(jù) -insert,如:insert into empnew_view(empno, ename, sal) values(8888, LAYNA , 6666);
修改數(shù)據(jù) -update,如:update emp_view set sal = sal + 100 where empno = 8888;
刪除數(shù)據(jù) -delete,如:delete from emp_view where empno = 8888;
注意:針對(duì)視圖的更新操作(insert、update、delete)實(shí)際上改變的是基表中的數(shù)據(jù)。
b、在創(chuàng)建視圖時(shí)定義 check 約束
WITH CHECK OPTION 選項(xiàng)用于在視圖上定義 CHECK 約束
示例:CHREATE VIEW emp_view4 AS SELECT * FROM emp_view WHERE deptno = 20 WITH CHECK OPTION chk_view;
SQL create view dept_emp_view2 as select * from dept_emp_view where deptno = 10 with check option constraint ck_view;
視圖已創(chuàng)建。SQL select * from dept_emp_view2;
DEPTNO DNAME EMPNO ENAME JOB
10 ACCOUNTING 7782 CLARK MANAGER
10 ACCOUNTING 7839 KING PRESIDENT
10 ACCOUNTING 7934 MILLER CLERK
SQL update dept_emp_view set deptno = 20 where empno = 7782;
update dept_emp_view set deptno = 20 where empno = 7782
第 1 行出現(xiàn)錯(cuò)誤:
ORA-01779: 無(wú)法修改與非鍵值保存表對(duì)應(yīng)的列
check 約束的作用是在添加或者修改數(shù)據(jù)時(shí)數(shù)據(jù)必須滿足 with check option 前的 where 子句的條件。如上例:修改和添加數(shù)據(jù)時(shí) deptno 的值必須為 10。
c、修改視圖
使用 CREATE OR REPLACE VIEW 子句修改視圖。
示例:CREATE OR REPLACE VIEW emp_view AS SELECT * FROM emp WHERE job = SALESMAN
SQL CREATE OR REPLACE VIEW emp_view AS SELECT * FROM emp WHERE job = SALESMAN
視圖已創(chuàng)建。
d、刪除視圖
當(dāng)視圖不再需要時(shí),用戶可以執(zhí)行 DROP view 語(yǔ)句刪除視圖。(不會(huì)刪除基表)
SQL DROP VIEW emp_view;
視圖已刪除。SQL select * from emp_view;
select * from emp_view
第 1 行出現(xiàn)錯(cuò)誤:
ORA-00942: 表或視圖不存在
3、Oracle 的復(fù)雜視圖 a、什么是復(fù)雜視圖?
復(fù)雜視圖是指包含函數(shù)、表達(dá)式或者分組數(shù)據(jù)的視圖,它主要用于執(zhí)行查詢操作。
注意:當(dāng)定義復(fù)雜視圖時(shí),必須要為函數(shù)或者表達(dá)式定義列的別名。
b、創(chuàng)建復(fù)雜視圖
示例:創(chuàng)建用于獲得每個(gè)崗位平均工資、工資總和、最高工資和最低工資的視圖。
SQL create VIEW job_view(job, avgsal, sumsal, maxsal, minsal) AS SELECT job, avg(sal), sum(sal), max(sal), min(sal) FROM emp GROUP BY job;
視圖已創(chuàng)建。SQL select * from job_view;
JOB AVGSAL SUMSAL MAXSAL MINSAL
CLERK 1037.5 4150 1300 800
SALESMAN 1400 5600 1600 1250
PRESIDENT 5000 5000 5000 5000
MANAGER 2758.33333 8275 2975 2450
ANALYST 3000 9000 3000 3000
c、復(fù)雜視圖上執(zhí)行 DML 操作的原則
DELETE 操作原則,視圖中包含以下元素之一不能執(zhí)行 delete 操作:
group by 子句、分組函數(shù)、distinct 關(guān)鍵字、rownum 偽列。
UPDATE 操作原則,視圖中包含以下元素之一不能執(zhí)行 update 操作:
group by 子句、分組函數(shù)、dinstinct 關(guān)鍵字、rownum 偽列、使用表達(dá)式定義的列。
INSERT 操作原則,視圖中包含以下元素之一不能執(zhí)行 insert 操作:
group by 子句、分組函數(shù)、dinstinct 關(guān)鍵字、rownum 偽列、使用表達(dá)式定義的列、視圖上沒(méi)有包含基表的 NOT NULL 列。
感謝你能夠認(rèn)真閱讀完這篇文章,希望丸趣 TV 小編分享的“Oracle 中數(shù)據(jù)庫(kù)對(duì)象視圖怎么用”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持丸趣 TV,關(guān)注丸趣 TV 行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!