有时候,我们在执行数据库请求时,需要向数据库传一些应用程序的上下文信息,比如当前应用的用户。
举个场景,我们要通过触发器记录对某些关键表的修改日志,日志包括修改的表,字段,字段的值,修改的时间,当然非常重要的是,还要知道是哪个用户修改的。但是触发器是不知道应用系统的用户信息的。怎么将这个信息传递给触发器,或者说让触发器能拿到呢?
我们可以利用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外,还可以使用函数。在此不再细表。

最新文章

  1. select2插件不兼容ie7,ie7下样子显示错位问题
  2. vim的配置与使用
  3. Tomcat 系统架构与设计模式
  4. objective-c 通过类名实例化类
  5. android 数据库操作
  6. Checking the content of the pointer
  7. 自学php笔记
  8. 使用feof()函数判断文件是否结束
  9. 8月1日起,这些新政将影响移动互联网产业-b
  10. HDU 4421 Bit Magic(奇葩式解法)
  11. 一些不太常用的Linux命令
  12. [HMLY]1.CocoaPods详解----使用
  13. HTML5学习笔记五:html5表单
  14. 2017年总结的前端文章——CSS盒模型详解
  15. vi命令插入
  16. Django的contenttypes
  17. Python3 tkinter基础 Menu add_checkbutton 多选的下拉菜单
  18. javascript Date定义和体验
  19. 解决SSH Secure Shell 连接Liunx 有乱码情况。
  20. Spring AOP实现原理-动态代理

热门文章

  1. scrapy架构解析
  2. protect,internal的区别
  3. stacked generalization 堆积正则化 堆积泛化 加权特征线性堆积
  4. 关于SAP S4 HANA 的13个问题
  5. session,cookie的理解(总结)
  6. git设置只允许特定类型的文件
  7. Codeforces Round #551 (Div. 2) A~E题解
  8. oracle_sql的用法?
  9. (4)获取servlet常用api
  10. python之tkinter_1