博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORACLE 中上下文 sys_context的创建及应用
阅读量:6271 次
发布时间:2019-06-22

本文共 2241 字,大约阅读时间需要 7 分钟。

hot3.png

最近在上的系统需要用到oracle的上下文,所以上网搜了下,写下来以备不时之需。

首先什么是上下文?

我认为就是公共变量。

下面是”的解释:

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函数是一定要的,后面两个是可选值,

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

SQL> DBMS_SESSION.set_context('testcontext', 'con2','abcd'); DBMS_SESSION.set_context('testcontext', 'con2','abcd') ORA-00900: invalid SQL statement

直接定义报错!

通过过程生成:

CREATE OR REPLACE PROCEDURE execcontext(contextkey in varchar2,contextvalue in varchar2) AS BEGINDBMS_SESSION.set_context('testcontext', contextkey,contextvalue);END;

执行同样报错!

SQL> exec execconttext('aaa','bbb'); begin execconttext('aaa','bbb'); end; ORA-06550: line 2, column 7:PLS-00201: identifier 'EXECCONTTEXT' must be declaredORA-06550: line 2, column 7:PL/SQL: Statement ignored

原来想要用过程定义上下文,需要声明

SQL> create or replace context testcontext  using execcontext; Context created SQL> exec execcontext('aa','bb'); PL/SQL procedure successfully completed SQL> select sys_context('testcontext','aa') from dual; SYS_CONTEXT('TESTCONTEXT','AA'--------------------------------------------------------------------------------bb SQL>
另外网上还有通过包定义上下文的,通常会报:
ORA-01031: insufficient privilegesORA-06512: at "SYS.DBMS_SESSION", line 101ORA-06512: at "SCOTT.PROCNAME", line 5ORA-06512: at line 2
此为权限问题:需要声明的时候加上 ACCESSED GLOBALLY
SQL> CREATE OR REPLACE CONTEXT MYCONTEXT USING MY_PACK_CONTEXT ACCESSED GLOBALLY;

整理一下,流程为:

--1、编写定义上下文的过程CREATE OR REPLACE PROCEDURE execcontext(contextkey in varchar2,contextvalue in varchar2) AS BEGINDBMS_SESSION.set_context('testcontext', contextkey,contextvalue);END;--2、声明上下文可以用此过程定义create or replace context testcontext  using execcontext;--3、下面就可以定义了SQL> exec execcontext('aa','bb'); PL/SQL procedure successfully completed--4、应用,查看什么的SQL> select sys_context('testcontext','aa') from dual; SYS_CONTEXT('TESTCONTEXT','AA'--------------------------------------------------------------------------------bb

转载于:https://my.oschina.net/u/1175229/blog/141617

你可能感兴趣的文章
PLM产品技术的发展趋势 来源:e-works 作者:清软英泰 党伟升 罗先海 耿坤瑛
查看>>
vue part3.3 小案例ajax (axios) 及页面异步显示
查看>>
软件测试(二)之 Failure, Error & Fault
查看>>
浅谈MVC3自定义分页
查看>>
.net中ashx文件有什么用?功能有那些,一般用在什么情况下?
查看>>
select、poll、epoll之间的区别总结[整理]【转】
查看>>
CSS基础知识(上)
查看>>
PHP中常见的面试题2(附答案)
查看>>
角色权限分配
查看>>
明小子动力上传拿webshell.zip
查看>>
ES6 Module export与import复合使用
查看>>
第三篇、image 设置圆角的几种方式
查看>>
关于Vs2010 C#使用DirectX的问题
查看>>
EPP(Eclipse PHP)语法高亮仿EditPlus配置
查看>>
OA账号架构权限的问题
查看>>
030——VUE中鼠标语义修饰符
查看>>
python编辑csv
查看>>
sql游标的使用与exec的两种用法
查看>>
数据结构
查看>>
78/90 Subsets --back tracking
查看>>