oracle-視圖(view)


一、視圖的定義

視圖也稱為虛表,視圖本身不占用物理存儲空間,視圖存放於數據字典中,簡單的來說視圖可以看做是sql語句的集合。視圖從數據庫中的表產生,這些表稱為視圖的基表,一個視圖可以從另一個視圖中產生。

視圖看上去非常象數據庫的物理表,對它的操作同任何其它的表一樣。當通過視圖修改數據時,實際上是在改變基表中的數據;相反地,基表數據的改變也會自動反映在由基表產生的視圖中。由於邏輯上的原因,有些Oracle視圖可以修改對應的基表,有些則不能(僅僅能查詢)。

tips:對視圖的查詢沒有限制,對視圖的插入、刪除、更新一般會有限制,所以為防止通過視圖來修改基表的數據可以將視圖創建為只讀(帶with read only)

二、視圖的作用

  1)提供各種數據表現形式, 可以使用各種不同的方式將基表的數據展現在用戶面前, 以便符合用戶的使用習慣(主要手段: 使用別

名);

  2)隱藏數據的邏輯復雜性並簡化查詢語句, 多表查詢語句一般是比較復雜的, 而且用戶需要了解表之間的關系, 否則容易寫錯; 如果

  基於這樣的查詢語句創建一個視圖, 用戶就可以直接對這個視圖進行"簡單查詢"而獲得結果. 這樣就隱藏了數據的復雜性並簡化了查詢語句.

  這也是oracle提供各種"數據字典視圖"的原因之一,all_constraints就是一個含有2個子查詢並連接了9個表的視圖(在catalog.sql中定義);

  3)執行某些必須使用視圖的查詢. 某些查詢必須借助視圖的幫助才能完成. 比如, 有些查詢需要連接一個分組統計后的表和另一

  表, 這時就可以先基於分組統計的結果創建一個視圖, 然后在查詢中連接這個視圖和另一個表就可以了;

  4)提供某些安全性保證. 視圖提供了一種可以控制的方式, 即可以讓不同的用戶看見不同的列, 而不允許訪問那些敏感的列, 這樣就可

以保證敏感數據不被用戶看見;

  5)簡化用戶權限的管理. 可以將視圖的權限授予用戶, 而不必將基表中某些列的權限授予用戶, 這樣就簡化了用戶權限的定義。

  三、視圖創建

  SQL> create view vw_emp as select empno,ename,job,hiredate,deptno from emp;

 

 

  SQL> select * from vw_emp where deptno=10;

    MPNO ENAME JOB HIREDATE DEPTNO

----------     ---------- --------- ---------

    7782  CLARK  MANAGER   09-JUN-81  10

    7839  KING   PRESIDENT   17-NOV-81  10

    7934  MILLER  CLERK     23-JAN-82  10

  對簡單視圖進行DML操作:

  SQL> insert into vw_emp values(1,'a','aa','05-JUN-88',10);
  SQL> update vw_emp set ename='cc' where ename='KING';
  SQL> delete vw_emp where ename='cc';
  SQL> select * from vw_emp where deptno=10

        EMPNO ENAME      JOB       HIREDATE      DEPTNO
        ---------- ---------- --------- --------- ---------
          7782 CLARK      MANAGER   09-JUN-81         10
          7934 MILLER     CLERK     23-JAN-82         10
             1 a          aa        05-JUN-88         10

  基表也發生了相應的更改:

  SQL> select empno,ename,job,hiredate,deptno from emp where deptno=10;

   創建只讀視圖:

  SQL> create view vw_emp_readonly as select empno,ename,job,hiredate,deptno from emp with read only;

  刪除視圖:

  可以刪除當前模式中的任何視圖;
    如果要刪除其他模式中的視圖,必須擁有DROP ANY VIEW系統權限;
    視圖被刪除后,該視圖的定義會從詞典中被刪除,並且在該視圖上授予的“權限”也將被刪除。視圖被刪除后,其他引用該視圖的視圖及存儲過程等都會失效。

  drop view vw_test;

  四、查看視圖:

  使用數據字典視圖
  1 dba_views——DBA視圖描述數據庫中的所有視圖
  2 all_views——ALL視圖描述用戶“可訪問的”視圖
  3 user_views——USER視圖描述“用戶擁有的”視圖
  4 dba_tab_columns——DBA視圖描述數據庫中的所有視圖的列(或表的列)
  5 all_tab_columns——ALL視圖描述用戶“可訪問的”視圖的列(或表的列)
  6 user_tab_columns——USER視圖描述“用戶擁有的”視圖的列(或表的列)

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM