KingbaseES-管理上下文

本文介绍了如何在KingbaseES中使用CREATECONTEXT语句创建context及其namespace,以及如何通过DBMS_SESSION包的set_context,clear_context和clear_all_context方法管理context的属性值。示例展示了创建、设置、查询和清除context的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

管理上下文
关于上下文
在KingbaseES中,CONTEXT上下文是指一组应用程序定义的属性,用于验证和保护应用程序。

使用 CREATE CONTEXT 语句为context创建namespace标签,将namespace与用来设置context的包相关联。可以使用 DBMS_SESSION.SET_CONTEXT 程序在关联包中设置context的属性值key-value。

namespace中的key-value只允许会话级访问,即只有设置其属性值的会话才可以访问该值, 其他会话访问该属性值都为空。系统视图sys_context包含数据库上下文所有信息。

例如:创建一个名为context_test的context,关联包为package_test:

CREATE CONTEXT context_test USING package_test;

上下文的使用
在KingbaseES中,通过使用dbms_session系统包中的过程来管理上下文。在使用 dbms_session 之前,需要将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,并重启 KingbaseES 数据库:

shared_preload_libraries = ‘dbms_session’
详情参见插件 dbms_session 。

DBMS_SESSION系统包包含的子程序及简介如下图所示:
在这里插入图片描述
下面通过一个示例演示上下文的使用:

创建 package
CREATE EXTENSION dbms_session;

set ora_input_emptystr_isnull=off;

create schema context_schema1;

grant usage on schema context_schema1 to public;

grant all on schema context_schema1 to public;

create or replace context context1 using context_schema1.test_package;

\set SQLTERM /

CREATE OR REPLACE PACKAGE context_schema1.test_package as

procedure set_context(ts_name varchar, key varchar, value varchar);

procedure clear_context(ts_name varchar,client_identifier varchar, key varchar);

procedure clear_all_context(ts_name varchar);

end test_package;

/

CREATE or replace PACKAGE BODY context_schema1.test_package as

procedure set_context(ts_name varchar, key varchar, value varchar) as

begin

dbms_session.set_context(ts_name, key,value);

end;

procedure clear_context(ts_name varchar,client_identifier varchar, key varchar) as

begin

dbms_session.clear_context(ts_name,client_identifier, key);

end;

procedure clear_all_context(ts_name varchar) as

begin

dbms_session.clear_all_context(ts_name);

end;

end test_package;

/

\set SQLTERM ;
创建 context

create or replace context c_user01 using context_schema1.test_package;
设置 namespace 的key-value

call context_schema1.test_package.set_context('c_user01', 'u_k2', 'u_v2');
查询

select sys_context('c_user01', 'u_k2');
SYS_CONTEXT('C_USER01','U_K2')
---------------------------------------------------
u_v2
修改u_k2的值并查询

call context_schema1.test_package.set_context('c_user01', 'u_k2', 'u_v2222');
Select sys_context('c_user01', 'u_k2');
SYS_CONTEXT('C_USER01','U_K2')
---------------------------------------------------
u_v2222
增加新的属性值u_k3并查询

call context_schema1.test_package.set_context('c_user01', 'u_k3', 'u_v3');
select sys_context('c_user01', 'u_k3');
SYS_CONTEXT('C_USER01','U_K3')
-------------------------------------------------
u_v3
清除上下文c_user01属性u_k2的值并再次查询

call context_schema1.test_package.clear_context('c_user01', null,'u_k2');
select sys_context('c_user01', 'u_k2');
 sys_context
-------------

(1 行记录)

select sys_context('c_user01', 'u_k3');
 sys_context
-------------
u_v3

(1 行记录)
清除上下文c_user01

call context_schema1.test_package.clear_all_context('c_user01');
select sys_context('c_user01', 'u_k3');
sys_context
-------------

(1 行记录)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值