Oracle的上下文开发--自己定义的Context开发

 

不知道有没有用过userevn和sys_context这两个方法。 

userenv在我们查看当前用户的session的字符集的时候是经常用到的。 

比如 
select userenv('language') from dual; 

sys_context的用户和这个userenv类似,是一个保持了和session有关的session级别的上下文。 这个上下文是一个session里的都可以访问到的地方,所以如果我们于需要在这里放入一些session级别的自己的信息,就可以使用这个sys_context的上下文了。 

那么我们如何把自己的信息放到session里了。Oracle提供了一个DBMS_session的强大的有关session操作的包。文档可见http://download.oracle.com/docs/cd/E11882_01/appdev.112/e10577/d_sessio.htm#i1010942  

我们可以使用里面的set_context的方法 

 

 

引用:
DBMS_SESSION.SET_CONTEXT ( 
namespace VARCHAR2, 
attribute VARCHAR2, 
value VARCHAR2, 
username VARCHAR2, 
client_id VARCHAR2 );

 

 

这里的几个参数的含义 
namespace 这个context的命名空间 
attribute 属性值,即为key值 
value 值 
username 用户名 默认null 
client_id 指定的clientid 默认null这里1-3函数是一定要的,后面两个是可选值, 

我们赶快到sqlplus试试把

引用:
SQL> exec dbms_session.set_context('', 'name', 'liuyong'); 
BEGIN dbms_session.set_context('', 'name', 'liuyong'); END; 


ERROR at line 1: 
ORA-28106: input value for argument #1 is not valid 
ORA-06512: at "SYS.DBMS_SESSION", line 78 
ORA-06512: at line 1



这里出错了。主要是我们的用法不对,在Oracle的文档里已经描述了,这里的context只能是建立create来使用,那么我们应该如何来用了 

首先建立package来包装这个context 
create or replace package my_context_p as 
procedure put(key varchar2, value varchar2); 
end; 

create or replace package body my_context_p as 
procedure put(key varchar2, value varchar2) as 
begin 
dbms_session.set_context('my_context ',key,value); 
end; 
end; 


然后建立context 
create or replace context my_context  using my_context_p ACCESSED GLOBALLY; 
注意这里的context的名字要和package里set_context的时候一样。 否则后面调用会告诉你ORA-01031: insufficient privileges。 

调用 
SQL> exec my_context_p.put('test', 'inthirties'); 

检查 
SQL> exec dbms_output.put_line(sys_context('my_context','test')); 
inthirties 

这样我们就实现了我们需要的功功能呀。

 

 




 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inthirties

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值