当前位置:首页 > 开发 > 数据库 > 正文

oracle 创建视图 with check option

发表于: 2012-12-13   作者:daizj   来源:转载   浏览:
摘要: 我们来看下面的例子: create or replace view testview as select empno,ename from emp where ename like ‘M%’ with check option; 这里我们创建了一个视图,并使用了with check option来限制了视图。 然后我们来看一下视图包含的结果: select * from testv
我们来看下面的例子:
create or replace view testview
as
select empno,ename from emp where ename like ‘M%’
with check option;

这里我们创建了一个视图,并使用了with check option来限制了视图。 然后我们来看一下视图包含的结果:
select * from testview得到:
EMPNO ENAME
———- ———–
7654 MARTIN
7934 MILLER
这两条记录

然后我们在试图将其中一条更新:
update testview
set ename = ‘Mike’
where empno = 7654;
OK,这条更新语句可以执行,并没有什么问题,但是当我们执行另一条更新时:
update testview
set ename = ‘Robin’
where empno = ‘7654′;
就会出现ORA-01402: 视图 WITH CHECK OPTIDN 违反 where 子句的错误,这是因为什么呢?

这是因为前面我们在创建视图时指定了witch check option关键字,这也就是说,更新后的每一条数据仍然要满足创建视图时指定的where条件,所以我们这里发生了错误ORA-01402。

但是需要说明的时 ,虽然指定了with check option,我们还是可以删除视图中的数据。例如上例中,我们可以使用
delete from test where where empno =   7654

我创建一个视图:  
  create   view   IS_student  
  as  
  select   sno,sname,sage  
  from   student  
  where   sname='IS'  
  with   check   option;  
  加上了with   check   option;后,不能执行插入操作:  
   
  insert   into   is_student  
  values('95100','李娜',12)  
   
  什么原因?不加上with   check   option则可以! 



with   check   option可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。比如你insert,那么加的这条记录在刷新视图后必须可以看到;如果修改,修改完的结果也必须能通过该视图看到;如果删除,当然只能删除视图里有显示的记录。  
   
  --->而你只是查询出sdept='is'的纪录,你插入的根本不符合sname='is'呀,所以就不行

  

oracle 创建视图 with check option

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
这学期开了数据库的课,对sql注入颇感兴趣。因此,对数据库语句也颇为喜爱。遇到了with check optio
这题是考:insertWITH CHECK OPTION的用法 insert into (<select clause> WITH CHECKOPTION)
做SCM时,怎么也不能创建视图,报告没有权限。 我没有按上面的步骤解决,想了想为什么该用户为什么
前情提要: Oracle OpenWorld 2013中Larry Ellison爆料的Oracle新特性:Oracle In Memory Database O
  如视图中所讨论的,视图提供在一个或多个表中查看数据的替代方法。通过创建视图,可以对想要各种
下面我们创建一个最基本的视图,表格视图,然后显示用户信息。 我们需要做这样几件事情: 1、在View
下面我们创建一个最基本的视图,表格视图,然后显示用户信息。 我们需要做这样几件事情: 1、在View
http://blog.sina.com.cn/s/blog_5a6efa3301012rx1.html //[]->=->release三部曲 创建简单表
很久没写博客了,所以这两天打算把前段时间学到的东西全部记录下来,也当作一种复习。 要想以编程的
要想以编程的方式创建视图,需要使用视图控制器中定义的viewDidLoad方法,只有在运行期间生成UI时才
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号