天天看點

oracle sys_context與dbms_session.set_context實作view動态查詢

--建立包及包體(之前我僅建立包,未建立包體;且要定義一個存儲過程

--調用dbms_session.set_context配置context的相關參數值

SQL> create or replace package pack_order_date

  2  as

  3   procedure put(key varchar2,value  varchar2);

  4  end pack_order_date;

  5  /

Package created

SQL> create or replace package body pack_order_date

  2  as

  3   procedure put(key varchar2,value  varchar2)

  4    is

  5   begin

  6     dbms_session.set_context('my_context',key,value);

  7   end;

  8  end pack_order_date;

  9  /

Package body created

--建立了包及包體,然後建立context,注意:此context要位于上述的包中

--且context的名稱要與上述包體存儲過程set_context的my_context一樣

create or replace context my_context using pack_order_date;

--建立基于context的視圖

SQL> create or replace view v_t_limit as select a,end_date from t_limit where end_date=sys_context('my_context','order_date');

View created

--執行包體存儲過程為context屬性order_date指派

SQL> exec pack_order_date.put('order_date','2011');

PL/SQL procedure successfully completed

--查詢視圖,即可實作動化參數化查詢視圖了

SQL> select * from v_t_limit;

                                      A END_DATE

--------------------------------------- ----------------------

                                      2 2011

SQL> select * from t_limit;

                                      A END_DATE

--------------------------------------- ----------------------

                                      1 2013

                                      2 2011

小結:1,sys_context使用,2個參數分别為:context及其屬性

            2,context屬性用dbms_session.set_context配置

            3,建立包及包體,為context的屬性配置值

            4,通過sys_context建立視圖

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-755722/,如需轉載,請注明出處,否則将追究法律責任。

轉載于:http://blog.itpub.net/9240380/viewspace-755722/