VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

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的示例

相关链接

CREATE CONTEXT