oracle sys_context與dbms_session.set_context實現view動態查詢

wisdomone1發表於2013-03-11

--建立包及包體(之前我僅建立包,未建立包體;且要定義一個儲存過程
--呼叫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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章