Oracle视图(View)demo

来源:互联网 发布:夜跑装备 知乎 编辑:程序博客网 时间:2024/06/06 03:05

Oracle视图(View)创建使用

Oracle对象教程:视图(View)创建使用,视图(View)实际上是一张或者多张表上的预定义查询,这些表称为基表。从视图中查询信息与从表中查询信息的方法完全相同。只需要简单的SELECT…FROM即可。

视图具有以下优点:

1. 可以限制用户只能通过视图检索数据。这样就可以对最终用户屏蔽建表时底层的基表。

2. 可以将复杂的查询保存为视图。可以对最终用户屏蔽一定的复杂性。

3. 限制某个视图只能访问基表中的部分列或者部分行的特定数据。这样可以实现一定的安全性。

4. 从多张基表中按一定的业务逻辑抽出用户关心的部分,形成一张虚拟表。

语法结构:创建视图


create or repalce view V_xxx AS

  select .....


需求:从多张数据表中提取某些字段(这些字段通常被经常使用,个人觉得视图相当于是抽取公共的部分字段内容进行封装)

CREATE OR REPLACE VIEW V_DEALER_CONSIGNMENT_INVENTORYAS

SELECT PA.V_ROUTEID,

       PA.V_ROUTENAME,

       PA.V_PROD_CODE,

       PA.V_PROD_NAME,

       P1.V_BIG_TYPE,

       P1.V_PROD_BIG_NAME,

       P1.V_SMALL_TYPE,

       P1.V_SMALL_NAME,

       PA.N_NUM N_CONSIGNMENT_NUM,

       PA.N_ACTIVATION_NUM,

       PB.N_BACK_NUM,

       (PA.N_NUM - PC.N_SALE_NUM- PB.N_BACK_NUM) N_STOCK_NUM,

       PC.N_SALE_NUM

  FROM (SELECT T.V_PROD_CODE,T.V_PROD_NAME,T.V_BIG_TYPE,T.V_SMALL_TYPE,Y.V_SMALL_NAME,B.V_PROD_BIG_NAME

          FROM T_DEALER_PRODUCT T, T_DEALER_PROD_TYPE Y, T_DEALER_PROD_BIG B

         WHERE T.V_SMALL_TYPE = Y.V_SMALL_TYPE

           AND Y.V_BIG_TYPE = B.V_PROD_BIG_CODE) P1,

       --寄售量、激活量

       (SELECT O.V_ROUTEID,O.V_ROUTENAME,V_PROD_NAME,V_PROD_CODE,

               SUM(N_NUM) N_NUM,SUM(N_ACTIVATION_NUM) N_ACTIVATION_NUM

          FROM T_DEALER_ORDER_PROD A, T_DEALER_CONSIGNMENT_ORDER O

         WHERE A.V_ORDERID = O.V_ORDERID

           AND V_STATE = 'FINISH'

         GROUP BY V_PROD_CODE, O.V_ROUTEID, V_PROD_NAME, O.V_ROUTENAME) PA,

       --PB 退貨量

       (SELECT A.V_PROD_CODE, R.V_ROUTEID,COUNT(A.V_ICCID) N_BACK_NUM

          FROM T_DEALER_PROD_RETURN R, T_DEALER_RETURN_ANALISIS A

         WHERE R.N_ID = A.N_ID

           AND V_RETURN_TYPE ='RETURN'

           AND V_RETURN_WAY='Consignment'

           AND V_STATE='FINISH'

           AND A.V_PAY_TYPE = '5'

         GROUP BY A.V_PROD_CODE, R.V_ROUTEID) PB,

       --PC 已銷量

       (SELECTSUM(N_NUM) N_SALE_NUM, V_PROD_CODE, A.V_ROUTEID

          FROM T_DEALER_ORDER_PROD A, T_DEALER_ORDER B

         WHERE A.V_ORDERID = B.V_ORDERID

           AND N_PAY_TYPE = 5

           AND V_STATE != 'CANCEL'

         GROUP BY V_PROD_CODE, A.V_ROUTEID) PC

 WHERE

   PA.V_PROD_CODE = P1.V_PROD_CODE

   AND PA.V_ROUTEID = PB.V_ROUTEID(+)

   AND PA.V_PROD_CODE = PB.V_PROD_CODE(+)

   AND PA.V_ROUTEID = PC.V_ROUTEID(+)

   AND PA.V_PROD_CODE = PC.V_PROD_CODE(+);