Oracle的上下文开发--自己定义的Context开发
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操作的包。 我们可以使用里面的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 这样我们就实现了我们需要的功功能呀。
如果没有那句“三十而立”,三十岁的男人正可以轻轻松松
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~