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

网友投稿 976 2022-10-01

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小时内删除侵权内容。

上一篇:RestTemplate设置超时时间及返回状态码非200处理
下一篇:小程序转发功能的实现(小程序 转发)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~