利用oracle session context 向oracle传值

有时候,咱们在执行数据库请求时,须要向数据库传一些应用程序的上下文信息,好比当前应用的用户。
举个场景,咱们要经过触发器记录对某些关键表的修改日志,日志包括修改的表,字段,字段的值,修改的时间,固然很是重要的是,还要知道是哪一个用户修改的。可是触发器是不知道应用系统的用户信息的。怎么将这个信息传递给触发器,或者说让触发器能拿到呢?
咱们能够利用oracle 的 session context来实现。
你们知道,session 就是一次链接到断开链接这个会话周期,而且会话之间是隔离的。
一、建立一个用来修改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;
二、建立一个咱们本身的context,并与存储过程绑定
CREATE OR REPLACE CONTEXT hcm_context USING proc_hcm_context;
 
三、测试,咱们在context中写入一个变量及它的值 hcm_user, 9999
begin
   proc_hcm_context( 'hcm_context', 'hcm_user', '9999');
end ;数据库

四、取得变量的值
在存储过程当中,执行下面的语句获得当前链接的应用系统的帐号,将返回 9999 
select sys_context('hcm_context', 'hcm_user') from dual;session

 

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

相关文章
相关标签/搜索