• [每日一题] OCP1z0-047 :2013-07-29 视图――别名





    本题的考点是如何创建视图,对于视图的详细知识点,可以参考我的博客:

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

    好,接下来我们来做测试,先登录到oe用户,查相关的表。

    gyj@OCM> conn oe/oe
    Connected.
    oe@OCM> select table_name from tabs;
    
    TABLE_NAME
    ------------------------------
    PRODUCT_REF_LIST_NESTEDTAB
    SUBCATEGORY_REF_LIST_NESTEDTAB
    PROMOTIONS
    ORDERS
    PRODUCT_DESCRIPTIONS
    WAREHOUSES
    PRODUCT_INFORMATION
    ORDER_ITEMS
    CUSTOMERS
    INVENTORIES
    
    10 rows selected.
    

    一、答案A,很明显是错的,视图的字段与表的字段的个数不一样,操作如下报错:


    oe@OCM> CREATE OR REPLACE VIEW ord_vu(order_id,order_date) 
      2  AS SELECT o.order_id,o.order_date,COUNT(i.line_item_id) "NO OF ITEMS" FROM orders o JOIN order_items i ON(o.order_id=i.order_id)
      3  GROUP BY o.order_id,o.order_date;
    CREATE OR REPLACE VIEW ord_vu(order_id,order_date)
                                  *
    ERROR at line 1:
    ORA-01730: invalid number of column names specified
    
    在CREATE OR REPLACE VIEW ord_vu(order_id,order_date,ct)添加一列CT,操作如下就没问题:
    
    oe@OCM> CREATE OR REPLACE VIEW ord_vu(order_id,order_date,ct) 
      2  AS SELECT o.order_id,o.order_date,COUNT(i.line_item_id) "NO OF ITEMS" FROM orders o JOIN order_items i ON(o.order_id=i.order_id)
      3  GROUP BY o.order_id,o.order_date;
    
    View created.
    


    二、答案B是正确的,把视图定义的列名去掉,视图默认这些列名来自select中的显示的列,操作如下:

    oe@OCM> CREATE OR REPLACE VIEW ord_vu 
      2  AS SELECT o.order_id,o.order_date,COUNT(i.line_item_id) "NO OF ITEMS" FROM orders o JOIN order_items i ON(o.order_id=i.order_id)
      3  GROUP BY o.order_id,o.order_date;
    
    View created.
    
    oe@OCM> select * from ord_vu;
    
      ORDER_ID ORDER_DATE                                                                  NO OF ITEMS
    ---------- --------------------------------------------------------------------------- -----------
          2354 15-JUL-08 08.18.23.234567 AM                                                         13
          2361 14-NOV-07 05.34.21.986210 AM                                                          9
          2363 24-OCT-07 07.49.56.346122 AM                                                          9
          2367 28-JUN-08 11.53.32.335522 AM                                                          8
    省略结果。。。。。。。。。。。。。。。
    



    三、答案C是错的,在创建视图时,对这种使用各种函数,或运算表达式的列,一定要起别名,如没有别名视图创建就会失败,操作如下:


    oe@OCM> CREATE OR REPLACE VIEW ord_vu 
      2  AS SELECT o.order_id,o.order_date,COUNT(i.line_item_id) FROM orders o JOIN order_items i ON(o.order_id=i.order_id)
      3  GROUP BY o.order_id,o.order_date;
    AS SELECT o.order_id,o.order_date,COUNT(i.line_item_id) FROM orders o JOIN order_items i ON(o.order_id=i.order_id)
                                      *
    ERROR at line 2:
    ORA-00998: must name this expression with a column alias
    
    把上面的视图改成如下:
    oe@OCM> CREATE OR REPLACE VIEW ord_vu 
      2  AS SELECT o.order_id,o.order_date,COUNT(i.line_item_id)  CT FROM orders o JOIN order_items i ON(o.order_id=i.order_id)
      3  GROUP BY o.order_id,o.order_date;
    
    View created.
    


    四、答案D也是错的,错误与答案C一个问题


    oe@OCM> CREATE OR REPLACE VIEW ord_vu 
      2  AS SELECT o.order_id,o.order_date,COUNT(i.line_item_id)||'NO OF ITEMS' FROM orders o JOIN order_items i ON(o.order_id=i.order_id)
      3  GROUP BY o.order_id,o.order_date
      4  WITH CHECK OPTION;
    AS SELECT o.order_id,o.order_date,COUNT(i.line_item_id)||'NO OF ITEMS' FROM orders o JOIN order_items i ON(o.order_id=i.order_id)
                                                            *
    ERROR at line 2:
    ORA-00998: must name this expression with a column alias
    
     把上面的视图改成如下:
    oe@OCM> CREATE OR REPLACE VIEW ord_vu 
      2  AS SELECT o.order_id,o.order_date,COUNT(i.line_item_id)||'NO OF ITEMS' CT FROM orders o JOIN order_items i ON(o.order_id=i.order_id)
      3  GROUP BY o.order_id,o.order_date
      4  WITH CHECK OPTION;
    
    View created.
    
    


    正确答案:B

    结总:

    在创建视图时,对这种使用各种函数,或运算表达式的列,一定要起别名,如没有别名视图创建就会失败。

    定义视图的列名可以省略,来自SELECT定义中的列名,如果定义视图的列名不省略,那个列的个数与SELECT定义中的列的个数要一致。


  • 相关阅读:
    Java注解学习
    微信小程序开发的一些基础知识点
    feign请求传送实体类参数的一些摸索
    springcloud bus中踩过的坑
    API网关初接触
    ELKF学习(Elasticsearch+logstash+kibana+filebeat)
    getWriter() has already been called for this response异常的一些问题
    kafka的学习
    如何优化一个丑陋的switch语句!
    项目启动之后进行一些初始化的方法
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3223606.html
Copyright © 2020-2023  润新知