--创建包及包体(之前我仅创建包,未创建包体;且要定义一个存储过程
--调用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创建视图