`
regedit_123
  • 浏览: 321276 次
  • 性别: 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用法

    Oracle 下 WITH CHECK OPTION 用法 WITH CHECK OPTION 是 Oracle 中的一种视图定义选项,它可以确保数据库中正在修改的数据的完整性。该选项通常用在视图定义中,以确保任何引用该视图的 INSERT 或 UPDATE 语句都...

    ORACLE_视图的_with_check_option.doc

    Oracle中的`WITH CHECK OPTION`是视图创建时的一个重要特性,用于限制对视图的数据修改操作,确保修改后的数据仍然符合视图的定义条件。这个选项使得视图不仅仅是查询的工具,也成为了一种数据安全控制手段,防止...

    oracle047课堂笔记2

    - 如果子查询中包含了`WHERE`条件,并且指定了`WITH CHECK OPTION`,那么只有满足这个条件的数据才能被插入。 ```sql SQL> INSERT INTO (SELECT name FROM a WHERE id < 100 WITH CHECK OPTION) VALUES ('NBA'); ...

    Oracle OCA 1Z0-051认证题库

    CREATE VIEW v4 AS SELECT prod_id, cust_id, SUM(quantity_sold) FROM SALES WHERE time_id * 365 GROUP BY prod_id, cust_id WITH CHECK OPTION; ``` **选项分析:** - A. `v3`视图限制了`cust_id`的值,因此不能...

    oracle oca 考题

    以上三个题目涵盖了Oracle数据库中的基本概念和技术点,包括CREATE TABLE AS SELECT命令、视图创建及其WITH CHECK OPTION的使用,以及使用LIKE进行模糊匹配的方法。这些都是Oracle OCA考试中可能会出现的重要知识点...

    oracle视图详解

    2. 在没有 WITH CHECK OPTION 和 WITH READ ONLY 时,视图可以进行Insert、Update 和 Delete 操作。 在 Oracle 中,还有一种视图:物化视图(MATERIALIZED VIEW),也称实体化视图,快照(8i 以前的说法),它是...

    Oracle11g OCA认证考试试题Demo 1z0-051

    WITH CHECK OPTION确保通过视图插入或更新的数据必须满足视图定义中的条件。对于视图v1和v3,由于它们仅包含基本的列选择,并且没有聚合函数或GROUP BY子句,因此可以通过它们执行所有的DML操作。而对于v2,虽然它...

    Oracle创建视图(View)

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

    oracle11g ocp 051翻译解析

    这是因为它们都是基于单个表`SALES`的视图,并且在创建时指定了`WITH CHECK OPTION`,这允许用户在符合视图定义条件的情况下执行DML操作。 - 视图v4由于使用了聚合函数`SUM()`,所以不能执行插入(insert)和删除...

    3.2 Oracle模式对象(2).ppt

    或者创建带`WITH CHECK OPTION`的视图,确保插入或更新的数据符合视图的定义: ```sql CREATE OR REPLACE VIEW HIS_Classes AS SELECT DEPARTMENT, COURSE, DESCRIPTION, MAX_STUDENTS, CURRENT_STUDENTS, NUM_...

    Oracle 19c OCP 082 试题带翻译-2022.5.2更新

    这个描述是不完整的,WITH CHECK OPTION的作用是确保通过视图插入或更新的数据在基表中也有效。 C. 视图可以更新,而无需重新授予视图权限。这是正确的,如果视图是可更新的(例如,没有聚合函数或分组),则可以...

    oracle ocp 051 175题库个人整合翻译版

    - 对于选项C,虽然也指定了WITH CHECK OPTION,但问题在于它只选择了部分列,而未包括所有列,这可能会导致在某些情况下无法执行DML操作,特别是如果未选择的列具有NOT NULL约束时。 - 对于选项D,其使用了聚合...

    oracle_oca最新题库

    使用 WITH CHECK OPTION 的插入命令 (INSERT Using WITH CHECK OPTION)** - `WITH CHECK OPTION`通常用于定义视图,确保通过该视图进行的任何更新都符合指定的条件。 - 这个选项与题目需求不符,因此不是最佳选择...

    oracle 10g培训文档

    创建视图的语法是`create or replace view`,可以通过`with check option`来限制对视图的更新,但若视图包含不可更新的部分,则需要使用触发器进行操作。此外,视图还可以设置为只读,即`with read only`。 同义词...

    Oracle OCA OCP 1Z0 051 题库

    - 视图的创建和其对DML操作的可操作性,包括如何使用WITH CHECK OPTION来保证视图上DML操作的完整性。 - 单行函数的使用,包括它们的特性、如何嵌套使用以及它们返回的结果。 - 字符串匹配,特别是如何使用LIKE...

    Oracle的基本命令

    - **`WITH CHECK OPTION`**:确保所有对视图的插入和更新操作都满足定义视图时的条件。 **只读视图**: ```sql CREATE OR REPLACE VIEW v_read AS SELECT * FROM books WITH READONLY; ``` - **`WITH READONLY`**:...

    oracle 1z051

    从提供的文档片段中,我们可以看到创建视图的命令及选项,例如WITH CHECK OPTION,它用于在视图上强制实施约束。例如,创建视图的命令如“CREATE VIEW v3 AS SELECT * FROM SALES WHERE cust_id=2034 WITH CHECK ...

    Oracle视图操作

    CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 视图名[(别名 1[,别名2...])] AS 子查询 [WITH CHECK OPTION [CONSTRAINT 约束名]] [WITH READ ONLY] 其中: * OR REPLACE 表示替代已经存在的视图。 * FORCE 表示不管...

    Oracle考试必备知识

    - 创建视图:`CREATE VIEW vw_x AS SELECT * FROM tbx [WITH CHECK OPTION];` - 删除视图:`DROP VIEW vw_x;` 4. **索引(Index)**:用于加速数据检索的速度。 - 创建索引:`CREATE INDEX ind_x ON tbx (column...

Global site tag (gtag.js) - Google Analytics