您好,登錄后才能下訂單哦!
這篇文章主要介紹了Oracle中數據庫對象視圖怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
- 常見的數據庫對象:
對象 | 描述 |
---|---|
表 | 基本的數據存儲集合,由行和列組成 |
視圖 | 從表中抽取的邏輯上相關的數據集合 |
序列 | 提供有規律的數值 |
索引 | 提高查詢的效率 |
同義詞 | 給對象起的別名 |
視圖是一個虛擬的表,視圖建立在已有表的基本上,視圖賴以建立的這些表稱之為基表。
向視圖提供數據內容的語句稱之為SELECT語句。
主要出于兩個原因:
1、安全原因,限制數據訪問;2、視圖可使復雜的查詢易于理解和使用。
視圖分為簡單視圖、復雜視圖、連接視圖、只讀視圖:
1、簡單視圖只從單表里獲取數據;不包含函數和數據組。
2、復雜視圖從多表獲取數據;包含函數和數據組。
3、連接視圖是指基于多個表建立的視圖,使用連接視圖能夠簡化連接查詢。
4、只讀視圖只允許使用select語句,不允許其他DML語句的操作。
附加說明:DML(data manipulation language):它們是SELECT、UPDATE、INSERT、DELETE,就象它的名字一樣,這4條命令是用來對數據庫里的數據進行操作的語言。
創建視圖的語法格式:CREATE [OR REPLACE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [ CONSTRAINT constraint]] [WITH READ ONLY];
簡單視圖的創建示例:
建立用于查詢員工號、姓名、工資的視圖。
SQL> conn sys/02000059 as sysdba; 已連接。 SQL> grant create view to scott; 授權成功。 SQL> conn scott/02000059 已連接。 SQL> create VIEW emp_view AS select empno, ename, sal FROM emp; 視圖已創建。
視圖是一張虛擬的表,和表一樣,可以通過SELECT語句進行查詢。
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行。
在創建視圖時可以修改列的名稱。
SQL> create VIEW emp_view2(員工號, 員工名,工資) AS select empno, ename, sal FROM emp; 視圖已創建。 SQL> select * from emp_view2; 員工號 員工名 工資 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行。
創建連接視圖示例:
建立用于獲取部門號為10的部門號、部門名稱以及員工信息。
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; 視圖已創建。 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號部門員工信息的視圖。
SQL> CREATE VIEW emp_view3 AS select * from emp where deptno = 10 with read only; 視圖已創建。 SQL> update emp_view3 set sal = sal + 50; update emp_view3 set sal = sal + 50 第 1 行出現錯誤: ORA-42399: 無法對只讀視圖執行 DML 操作
查詢視圖-select,如:select * from emp_view;
添加數據-insert,如:insert into empnew_view(empno, ename, sal) values(8888, 'LAYNA', 6666);
修改數據-update,如:update emp_view set sal = sal + 100 where empno = 8888;
刪除數據-delete,如:delete from emp_view where empno = 8888;
注意:針對視圖的更新操作(insert、update、delete)實際上改變的是基表中的數據。
WITH CHECK OPTION選項用于在視圖上定義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; 視圖已創建。 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 行出現錯誤: ORA-01779: 無法修改與非鍵值保存表對應的列
check約束的作用是在添加或者修改數據時數據必須滿足with check option前的where子句的條件。如上例:修改和添加數據時deptno 的值必須為10。
使用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'; 視圖已創建。
當視圖不再需要時,用戶可以執行DROP view語句刪除視圖。(不會刪除基表)
SQL> DROP VIEW emp_view; 視圖已刪除。 SQL> select * from emp_view; select * from emp_view 第 1 行出現錯誤: ORA-00942: 表或視圖不存在
復雜視圖是指包含函數、表達式或者分組數據的視圖,它主要用于執行查詢操作。
注意:當定義復雜視圖時,必須要為函數或者表達式定義列的別名。
示例:創建用于獲得每個崗位平均工資、工資總和、最高工資和最低工資的視圖。
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; 視圖已創建。 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
DELETE操作原則,視圖中包含以下元素之一不能執行delete操作:
UPDATE操作原則,視圖中包含以下元素之一不能執行update操作:
INSERT操作原則,視圖中包含以下元素之一不能執行insert操作:
group by子句、分組函數、dinstinct關鍵字、rownum偽列、使用表達式定義的列、視圖上沒有包含基表的NOT NULL列。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Oracle中數據庫對象視圖怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。