oracle视图的描述,[每日一题] OCP1z0-047 :2013-08-12   view视图的描述哪些是正确的?...............................32...

1d38cc4ee4c403f4fb126ad7bcf23520.png

正确答案是: CE

这是OCP教材中的:

1、简单视图与复杂视图的定义:

365061a0e9de202080eef8c9bce8b3b1.png

2、复杂视图通常不能被DML:

5ca69b68dc75f1c7924bbe0a4f0448bc.png

3、WITH CHECKOP TIONT选项

5c446bfac4d2c19f217de73fdd283685.png

A不正确。简单视图可以被更新。

hr@OCM> CREATE VIEW empvu30 2 AS SELECT employee_id, last_name, salary 3 FROM employees 4 WHERE department_id = 30; View created. hr@OCM> update empvu30 set salary=salary+100; 7 rows updated. hr@OCM> commit; Commit complete.

B:错误。复杂视图中定义的的子查询可以包含group by或join,大部分复杂视图都是不能更新的。

hr@OCM> CREATE OR REPLACE VIEW v_emp_depart 2 AS SELECT department_id,count(*) count 3 FROM employees 4 GROUP BY department_id; View created. hr@OCM> update v_emp_depart set count=8 where department_id=60; update v_emp_depart set count=8 where department_id=60 * ERROR at line 1: ORA-01732: data manipulation operation not legal on this view

C:正确。含有distinct的视图是复杂视图,不能直接进行删除列操作。

凡是这样带有要把基表中多行合为一行的视图,改变视图中的一行,ORACLE都无法确定这一行对应基表中几行,这样的视图,都无法进行任何DML操作。会对多行进行合并的,也就只有分组、组函数和取消重复行DISTINCT选项。DISTINCT是取消重复行,其实就是将多个重复的行,合为一个,在视图中的一行,也有可能对应基表的中的若干行。

D:错误。通过视图插入到表中的数据,视图删除后表中数据不会被自动删除。删除视图只是删除视图的定义,视图是也称虚表不真正存放数据,真正的数据在表中。

gyj@OCM> drop view v_t3; View dropped. gyj@OCM> select * from v_t3; select * from v_t3 * ERROR at line 1: ORA-00942: table or view does not exist gyj@OCM> select * from t3; ID NAME SALARY ---------- ---------- ---------- 1 gyj1 5000 1 gyj11 5000 2 gyj2 6000 2 gyj22 6000 3 gyj3 7000 3 gyj33 7000 4 gyj4 8000 4 gyj44 8000 5 gyj5 7500 9 rows selected.

视图被删除了,但视图所对应的基表还在。

E:正确。通过or replace选项就不用删除后重建视图,而是直接替换。

创建视图命令中的[OR REPLACE]的意义,REPLACE有替换的意思。它的主要作用是修改视图的定义,也就是修改视图内的SQL语句。比如说上面的empvu30,我想为empvu30中增加一个列first_name,命令如下:

hr@OCM> CREATE OR REPLACE VIEW empvu30 2 AS SELECT employee_id, first_name,last_name, salary 3 FROM employees 4 WHERE department_id = 30; View created.

F:不正。如果视图中有条件,此选项保证了你只能在视图的条件之内,对视图进行DML。

例如我创建如下视图:gyj@OCM> create or replace view v_t3 as select id, name,salary from t3 where salary>=7000 with check option;View created.

视图中的条件是salary>=7000,因此,我插入一个要salary小于7000的行,将会报出错误:

gyj@OCM> insert into v_t3 values(5,'gyj5',1000);insert into v_t3 values(5,'gyj5',1000)*ERROR at line 1:ORA-01402: view WITH CHECK OPTION where-clause violation而插入一个大于7000的行,可以成功插入:

gyj@OCM> insert into v_t3 values(5,'gyj5',7500);1 row created.

其他的更新、删除我就不再试了,只要DML的结果满足SALARY大于等7000,DML就可以正常进行。

详细操作可以参考:

QQ:252803295

学习交流QQ群:

DSI&Core Search  Ⅰ 群:127149411(技术:已满)

DSI&Core Search  Ⅱ 群:177089463(技术:未满)

DSI&Core Search  Ⅲ 群:284596437(技术:未满)

DSI&Core Search  Ⅳ 群:192136702(技术:未满)

DSI&Core Search  Ⅴ 群:285030382(闲聊:未满)

MAIL:oracledba_cn@hotmail.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值