oracle 建立檢視用 with check option 子句詳解

壹頁書發表於2014-01-26
oracle的檢視是一個很有用的工具,在很多應用中的應用到。
在oracle檢視中,對於簡單檢視,oracle 允許進行 dml 操作 ,這就是說明如果我們在一個表上建立了一個檢視,前提是沒有限制對它 dml 操作,我就可以透過這個檢視往表裡插入資料。正是由於這種原因,如果我們在建立檢視時,用到 where 子句進行了限制。那麼我們透過檢視插入資料時,又會不會同樣受到 where 子句的限制呢?答案是,如果你在建立檢視時,使用where 子句限制時沒有使用到 with check option 子句 時,當你在透過檢視插入資料時,oracle 就不會檢查 where 子句的限制條件。 
下面我用例子來說明:

1. 建立表
SQL> create table s_tab ( id number ) ;

Table created.

SQL>

2.建立檢視(不用 with check option)
SQL> create or replace view s_view
  2  as
  3  select * from s_tab
  4  where id < 5 ;

View created.

3. 插入資料測試
SQL> insert into s_view values ( 1) ;

1 row created.

SQL> insert into s_view values (10 ) ;

1 row created.
SQL> select * from s_view ;

        ID
----------
         1

SQL>
SQL> select * from s_tab ;

        ID
----------
         1
        10

SQL>
結果沒有進行檢查

4. 建立檢視(用到 with check option)
SQL> create or replace view s_view
  2  as
  3  select * from s_tab
  4  where id < 5
  5  with check option ;

View created.

5. 插入資料
SQL> delete from s_tab ;
2 row deleted.

SQL> insert into s_view values ( 1) ;

1 row created.

SQL> insert into s_view values (10) ;
insert into s_view values (10)
            *
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
SQL> select * from s_view ;

        ID
----------
         1

SQL> select * from s_tab ;

        ID
----------
         1









來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1075741/,如需轉載,請註明出處,否則將追究法律責任。

相關文章