oracle 创建视图用 with check option 子句详解

小结:

如果创建的视图中带有where等条件,则with check option 子句可以保证让你只能在视图的条件之内对视图进行DML。

创建的视图中带有with check option 子句时,只DML的结果满足创建的视图中的where子句条件,DML就可以正常进行。

如果subquery中的SELECT子句上没有where条件里所有出现的列,则DML类型的主查询语句也不会执行成功的。(?)

如果不加WITH CHECK OPTION则在插入时不会检查where条件。即如果你在创建视图时,使用where 子句限制时没有使用到 with check option 子句 时,当你在通过视图插入数据时,oracle 就不会检查 where 子句的限制条件。


疑问:创建视图的语句里可以有group by子句【group by子句可以附带having子句的】(或是orderby)存在吗?不可group by子句吧


with check option 子句用于普通视图内联视图(in-line view)中。


关于普通视图内联视图的关系,可以参见:

内联视图和普通视图的关系以及和子查询的区别


WITH CHECK OPTION

The WITH CHECK OPTION clause specifies the level of checking to be done when doingDML against the view. If specified, every row that is inserted, updated or deleted through the view must conform to the definition of the view.

The problem:

SQL> CREATE VIEW d20 AS SELECT ename, sal, deptno FROM emp2 WHERE deptno = 20;
View created.
SQL> UPDATE d20 SET deptno = 10;
3 rows updated.

The solution:

SQL> CREATE VIEW d20 AS SELECT ename, sal, deptno FROM emp2 WHERE deptno = 20
  2  WITH CHECK OPTION;
View created.
SQL> UPDATE d20 SET deptno = 10;
UPDATE d20 SET deptno = 10
       *
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation


with check option 子句应用于普通视图中的例子,详见下文:


如果创建的视图中带有where等条件,则wit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值