DBMS_SESSION
功能描述
Vastbase G100在Oracle兼容模式下支持内置包DBMS_SESSION的部分功能,该内置包提供了查询和设置会话相关状态的方法。
注意事项
该功能仅在数据库兼容模式为Oracle时能够使用(即创建DB时DBCOMPATIBILITY='A'),在其他数据库兼容模式下不能使用该特性。
使用CREATE CONTEXT创建的context默认当前用户可使用,支持用户调用ACCESSED GLOBALLY设置context为全局变量。此时其他用户可以查询该命名空间下的attribute。
支持版本:
- V2.2 Build 10 (Patch No.11)及以后补丁版本。
- V2.2 Build 13及以后版本。
子程序
Vastbase支持该内置包的如下函数:
函数 | 描述 |
---|---|
set_context | 在用户自定义的命名空间下设置attribute-value值。输出类型为void。 注意:函数只能在通过create context创建的namespace下创建attribute-value,其值保存在内存中。 |
clear_all_context | 用于清除当前命名空间即命名空间中的所有attribute-value值。该过程需通过 namespace关联的 package 调用。输出类型为void。 |
set_context
语法格式
DBMS_SESSION.SET_CONTEXT (
NAMESPACE VARCHAR2,
ATTRIBUTE VARCHAR2,
VALUE VARCHAR2,
USERNAME VARCHAR2,
CLIENT_ID VARCHAR2
);
参数说明
NAMESPACE
命名空间。
限制:不可为空,且长度不超过30。
ATTURIBUTE
命名空间下的的属性名。
限制:不可为空,且长度不超过30个字节。
VALUE
命名空间下的属性值。
限制:不可为空,且长度不超过128个字节。
USERNAME
用户名,默认值为NULL。
限制:当前本值为空,不支持指定。
CLIENT_ID
用户ID,默认值为NULL。
限制:当前本值为空,不支持指定。
DBMS_SESSION.set_context必须在函数、存储过程或package中调用,用户不能直接调用。
前置步骤: 创建并切换至兼容模式为Oracle的数据库db_oracle。
CREATE DATABASE db_oracle dbcompatibility='A';
\c db_oracle
示例: 使用DBMS_SESSION包的内置函数实现上下文赋值和清除上下文属性值。
1、创建package,其中调用了set_context、clear_all_context函数,分别实现对上下文赋值和清除上下文属性值。
CREATE OR REPLACE PACKAGE pkg2 AS
PROCEDURE set_context(context_name IN VARCHAR2, attribute IN VARCHAR2, value IN VARCHAR2);
PROCEDURE clear_all_context(namespace IN VARCHAR2);
END pkg2;
/
CREATE OR REPLACE PACKAGE BODY pkg2 AS
PROCEDURE set_context(context_name IN VARCHAR2, attribute IN VARCHAR2, value IN VARCHAR2) IS
BEGIN
DBMS_SESSION.set_context(context_name, attribute, value);
END;
PROCEDURE clear_all_context(namespace IN VARCHAR2) IS
BEGIN
DBMS_SESSION.clear_all_context(namespace);
END;
END pkg2;
/
2、创建上下文。
CREATE CONTEXT test_namespace USING pkg2;
3、调用存储过程为上下文赋值,并查看上下文的属性。
CALL pkg2.set_context('test_namespace','attr1','val1');
SELECT SYS_CONTEXT('test_namespace','attr1') FROM DUAL;
返回结果显示为如下,成功调用set_context函数,则为上下文的赋属性值为val1
:
set_context
-------------
(1 row)
sys_context
-------------
val1
(1 row)
4、清除上下文,并查看上下文的属性。
call pkg2.clear_all_context('test_namespace');
SELECT SYS_CONTEXT('test_namespace','attr1') FROM DUAL;
返回结果如下,成功调用clear_all_context函数,则上下文被清除,查询结果为空:
clear_all_context
-------------------
(1 row)
ERROR: Inconsistent parameter: namespace 'TEST_NAMESPACE' dose not have parameter 'attr1'
CONTEXT: referenced column: sys_context
clear_all_context
语法格式
DBMS_SESSION.CLEAR_ALL_CONTEXT(
NAMESPACE VARCHAR2
);
参数说明
NAMESPACE:
命名空间。
限制:不可为空,且长度不超过30。
示例
参见DBMS_SESSION.set_context的示例。