CREATE CONTEXT

说明

创建一个新的数据库上下文

语法

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;