加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

利用oracle session context 向oracle传值

发布时间:2020-12-12 13:20:28 所属栏目:百科 来源:网络整理
导读:有时候,我们在执行数据库请求时,需要向数据库传一些应用程序的上下文信息,比如当前应用的用户。 举个场景,我们要通过触发器记录对某些关键表的修改日志,日志包括修改的表,字段,字段的值,修改的时间,当然非常重要的是,还要知道是哪个用户修改的。但

有时候,我们在执行数据库请求时,需要向数据库传一些应用程序的上下文信息,比如当前应用的用户。
举个场景,我们要通过触发器记录对某些关键表的修改日志,日志包括修改的表,字段,字段的值,修改的时间,当然非常重要的是,还要知道是哪个用户修改的。但是触发器是不知道应用系统的用户信息的。怎么将这个信息传递给触发器,或者说让触发器能拿到呢?
我们可以利用oracle 的 session context来实现。
大家知道,session 就是一次连接到断开连接这个会话周期,并且会话之间是隔离的。
1、创建一个用来修改context的存储过程。
CREATE OR REPLACE PROCEDURE proc_hcm_context(
? context_name varchar2,
? attribute_name varchar2,
? attribute_value varchar2
) AS
BEGIN
??? DBMS_SESSION.set_context(context_name,attribute_name,attribute_value);
END;
2、创建一个我们自己的context,并与存储过程绑定
CREATE OR REPLACE CONTEXT hcm_context USING proc_hcm_context;
?
3、测试,我们在context中写入一个变量及它的值 hcm_user, 9999
begin
?? proc_hcm_context( ‘hcm_context‘,‘hcm_user‘,‘9999‘);
end ;

4、取得变量的值
在存储过程中,执行下面的语句得到当前连接的应用系统的账号,将返回 9999?
select sys_context(‘hcm_context‘,‘hcm_user‘) from dual;

?

除了用存储过程修改context外,还可以使用函数。在此不再细表。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读