CREATE CONTEXT¶
说明¶
创建一个新的数据库上下文
参数¶
OR REPLACE
指定 OR REPLACE 允许替换已存在的上下文
namespace
上下文的名称,最大长度为40
schema
package 的模式名,如果未指定,会使用创建者的同名模式名
package
指定一个包名,只有在该包内部的函数或过程,才能修改上下文的属性(未支持该特性)
INITIALIZED EXTERNALLY
(仅语法支持)INITIALIZED指定当前数据库以外的实体。EXTERNALLY表示可以通过接口初始化上下文
INITIALIZED GLOBALLY
(仅语法支持)当全局用户连接到数据库时,上下文名称可以由LDAP目录初始化
ACCESSED GLOBALLY
指定上下文为全局上下文,一个会话对全局上下文的属性进行修改,所有会话都会受到影响
如果没有指定 ACCESSED GLOBALLY,则会话对上下文里属性的修改,只有自身可见
说明¶
USERENV 上下文是数据库内置上下文,不允许被删除或替换。
可以从 SYS_CONTEXT 和 DBA_CONTEXT 里查看所有的上下文。(USERENV 除外)
上下文是保存在了系统表,但上下文的属性只保存在内存里。
全局上下文的属性值,会在数据库关闭时被清空;非全局的上下文的属性值,会在连接断开时被清空
示例¶
--创建上下文
CREATE OR REPLACE CONTEXT CTT_TEST USING PRO_TEST;
--创建上下文所需函数
CREATE OR REPLACE PROCEDURE PRO_TEST(CTTNAME VARCHAR2, PARAM VARCHAR2, PVALUE VARCHAR2) AS
BEGIN
DBMS_SESSION.SET_CONTEXT(CTTNAME, PARAM, PVALUE);
END;
/
--设置上下文属性值
EXEC PRO_TEST('CTT_TEST', 'PARAM0', 'HELLO WORLD');
--获取上下文属性值
SELECT SYS_CONTEXT('CTT_TEST', 'PARAM0') FROM DUAL;
SYS_CONTEXT(text) |
-----------------------
HELLO WORLD |
总数目:1
--删除上下文
DROP CONTEXT CTT_TEST;