[毎日1題]OCP 1 z 0-047:2013-07-29ビュー――別名

5743 ワード


[每日一题] OCP1z0-047 :2013-07-29 视图――别名_第1张图片
[每日一题] OCP1z0-047 :2013-07-29 视图――别名_第2张图片
 
この問題のポイントは、ビューを作成する方法です.ビューの詳細については、私のブログを参照してください.
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定義の列の個数と一致します.