oracle-視圖(view)

1、視圖的定義sql

視圖也稱爲虛表,視圖自己不佔用物理存儲空間,視圖存放於數據字典中,簡單的來講視圖能夠看作是sql語句的集合。視圖從數據庫中的表產生,這些表稱爲視圖的基表,一個視圖能夠從另外一個視圖中產生。數據庫

視圖看上去很是象數據庫的物理表,對它的操做同任何其它的表同樣。當經過視圖修改數據時,其實是在改變基表中的數據;相反地,基表數據的改變也會自動反映在由基表產生的視圖中。因爲邏輯上的緣由,有些Oracle視圖能夠修改對應的基表,有些則不能(僅僅能查詢)。安全

tips:對視圖的查詢沒有限制,對視圖的插入、刪除、更新通常會有限制,因此爲防止經過視圖來修改基表的數據能夠將視圖建立爲只讀(帶with read only)oracle

2、視圖的做用spa

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

名);ip

  2)隱藏數據的邏輯複雜性並簡化查詢語句, 多表查詢語句通常是比較複雜的, 並且用戶須要瞭解表之間的關係, 不然容易寫錯; 若是it

  基於這樣的查詢語句建立一個視圖, 用戶就能夠直接對這個視圖進行"簡單查詢"而得到結果. 這樣就隱藏了數據的複雜性並簡化了查詢語句.form

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

  3)執行某些必須使用視圖的查詢. 某些查詢必須藉助視圖的幫助才能完成. 好比, 有些查詢須要鏈接一個分組統計後的表和另外一

  表, 這時就能夠先基於分組統計的結果建立一個視圖, 而後在查詢中鏈接這個視圖和另外一個表就能夠了;

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

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

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

  3、視圖建立

  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;

  4、查看視圖:

  使用數據字典視圖  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視圖描述「用戶擁有的」視圖的列(或表的列)

相關文章
相關標籤/搜索