zoukankan      html  css  js  c++  java
  • [每日一题] OCP1z0-047 :2013-08-12 view视图的描述哪些是正确的?


    正确答案是: CE

     

     

    这是OCP教材中的:

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


     

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

       

     

    3WITH CHECKOP TIONT选项

     


    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就可以正常进行。


      详细操作可以参考:

          http://blog.csdn.net/guoyjoe/article/details/8614677


  • 相关阅读:
    BibTex (.bib) 文件的凝视
    SQL注入原理解说,非常不错!
    怎样将文件隐藏在图片中
    白话经典算法系列之五 归并排序的实现
    帮你理解多线程
    很好的理解遗传算法的样例
    薏米红豆粥功效及做法介绍
    Linux makefile 教程 很具体,且易懂
    站点权重对于站点的重要性
    Codeforces Round #250 (Div. 2)——The Child and Set
  • 原文地址:https://www.cnblogs.com/pangblog/p/3255863.html
Copyright © 2011-2022 走看看