`
regedit_123
  • 浏览: 317957 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

oracle 之关键词 with check option

阅读更多

我们来看下面的例子:
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   sdept='IS'  
  with   check   option;  
  加上了with   check   option;后,不能执行插入操作:  
   
  insert   into   is_student  
  values('95100','李娜',12)  
   
  什么原因?不加上with   check   option则可以!  
 
with   check   option可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。比如你insert,那么加的这条记录在刷新视图后必须可以看到; 如果修改,修改完的结果也必须能通过该视图看到;如果删除,当然只能删除视图里有显示的记录。  
   
  --->而你只是查询出sdept='is'的纪录,你插入的根本不符合sdept='is'呀,所以就不行
 
默 认情况下,由于行通过视图进行添加或更新,当其不再符合定义视图的查询的条件时,它们即从视图范围中消失。例如,可创建一个查询,从而定义一个视图以在表 中检索所有员工薪水低于   $30,000   的行。如果该员工的薪水涨到了   $32,000,则查询视图时该特定员工将不再出现,因其薪水不符合视图所设的标准。但是,WITH   CHECK   OPTION   子句强制所有数据修改语句均根据视图执行,以符合定义视图的   SELECT   语句中所设的条件。如果使用该子句,修改行时需考虑到不让它在修改完后从视图中消失。任何可能导致行消失的修改都会被取消,并显示错误信息。  

 

 

                 select sign(100),sign(-100),sign(0) from dual;  ------   1,-1,0
                           
                 SELECT DECODE(SIGN(100),1,1,0) comparewithzero FROM dual;--1               
                 SELECT DECODE(SIGN(-100),1,1,0) comparewithzero FROM dual;--0               
                 SELECT DECODE(SIGN(0),1,1,0) comparewithzero FROM dual;--0

sign()函数,取符号,判断一个数是正数还是负数还是0,返回的值只可能是1,0,-1三种情况。

decode,拿sign()函数返回的值和1相比较,如果相同则返回1,否则返回0,用来统计大于0的正数的个数。

这样以来,就可以把负数和零排除在外。

分享到:
评论

相关推荐

    ORACLE_视图的_with_check_option.doc

    ORACLE 视图的 with check option

    oracle 下WITH CHECK OPTION用法

    oracle 下WITH CHECK OPTION用法

    Oracle创建视图(View)

    2.在没有WITH CHECK OPTION和 READ ONLY 的情况下,查询中不能使用ORDER BY 子句; 3.如果没有为CHECK OPTION约束命名,系统会自动为之命名,形式为SYS_Cn; 4.OR REPLACE选项可以不删除原视图便可更改其定义并...

    21天学通Oracle

    7.1.7 with check option选项 126 7.1.8 关系视图小结 128 7.2 内嵌视图 128 7.2.1 内嵌视图简介 128 7.2.2 内嵌视图的使用 128 7.2.3 内嵌视图小结 130 7.3 对象视图 131 7.3.1 对象视图简介 131 7.3.2 ...

    Oracle OCP认证考试

    1. You need to load information about new customers from the NEW_CUST table into the tables CUST and CUST_SPECIAL. If a new customer has a ... INSERT using WITH CHECK OPTION

    DevArt UniDAC v.3.70.0.18 (15-Jun-2011) (with Source Code)

    Bug in bookmark validity check is fixed Oracle data provider Oracle 9, Oracle 10, and Oracle 11 authentication in the Direct mode is supported Case sensitive login and password in the Direct mode ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。  拉里•埃里森  就业前景 从就业与择业的...

    unidac5.3.8src

    Bug with "Range check error" in Protocol 2 is fixed Bug with executing "WITH ... SELECT" statements is fixed Bug with SSL connection on Android is fixed SQLite data provider Now the Direct mode is ...

    oracle数据库经典题目

    WITH CHECK OPTION D. WITH CHECK ONLY 22. 如果想查看视图中哪些字段是可以更新的,应当查询哪一个数据字典视图?( D ) A. DBA_VIEWS B. DBA_OBJECTS C. DBA_CLU_COLUMNS D. DBA_UPDATABLE_COLUMNS 23. 在下列各...

    Devart UniDAC v5.3.8 Source

    -Bug with "Range check error" in Protocol 2 is fixed -Bug with executing "WITH ... SELECT" statements is fixed -Bug with SSL connection on Android is fixed SQLite data provider -Now the Direct mode is...

    DBA常用SQL

    with check option 该列有访问且值等(即条件一致) novalidate enable 约束">第一章:写简单的sql语句 SQL> alter user scott account unlock; SQL> alter user scott identified by tiger; SQL> conn ...

    每个程序员都需要了解的一个SQL技巧

     使用SQL标准的WITH CHECK OPTION子句能完成这点,至少Oracle和SQL Server都实现了这个功能。下面是实现方式:  CREATE TABLE books (  id NUMBER(10) NOT NULL,  title VARCHAR2(100 CHAR) NOT NULL, ...

    在Oracle中向视图中插入数据的方法

    现在我只对INSERT准则做一下说明:在INSERT语句中不能显式或隐式的引用到任何非码保留基础表中的字段,如果在定义视图中使用了WITH CHECK OPTION子句,那就不能对视图执行INSERT操作. 注:码保留表,非码保留表的解释:...

    端口查看工具

    the tray icon option, one click on the tray icon with the left mouse button will open CurrPorts. (Without this option, double-click is required) * Version 1.75: o Added 'Exclude Selected ...

    Devart LinqConnect 3.1

    The 'Numeric Primary Key As Identity' Oracle option is added: if this option is selected, the "StoreGeneratedPattern" will be set to Identity by default for Number primary keys The 'Integer Primary ...

    ORCALE语句大全

    权限传递 grant all on emp to zhu with grant option(对象权限) 根表有关的权限 grant create session to zhu with admin option(系统权限)其他的权限 收回权限 revoke all on emp to zhu(株连制度) 5 ...

    Ice License v1.15

    The use this option in your application will help in protecting them against cracking or code spying without your permission. You may have some critical code in your program, such as the detection ...

    Delphi7.1 Update

    Using the TDataSetProvider poFetchDetailsOnDemand option with a server-side master/detail definition (nested dataset on the client side) raises an exception when the master TClientDataset is opened ...

Global site tag (gtag.js) - Google Analytics