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

利用oracle session context 向oracle传值的更多相关文章

  1. oracle session和process的关系

    什么是session 通俗来讲,session 是通信双方从开始通信到通信结束期间的一个上下文(context).这个上下文是一段位于服务器端的内存:记录了本次连接的客户端机器.通过哪个应用程序.哪个 ...

  2. Oracle session连接数和inactive的问题记录

    Oracle session连接数和inactive的问题记录 http://timnity.javaeye.com/blog/280383 从上周起,服务器Oracle数据库出现问题,用不到半天,就 ...

  3. Oracle session active 和 inactive 状态 说明

    Oracle session active 和 inactive 状态 说明 原创 2011年06月12日 13:08:00 标签: session / oracle / database / ser ...

  4. 转 Oracle全文检索http://docs.oracle.com/cd/E11882_01/text.112/e24436/toc.htm

    SQL > exec ctx_ddl.create_preference ('my_test_lexer','chinese_lexer') : PL/SQL 过程成功完成 SQL > E ...

  5. 【Oracle】OGG(Oracle GoldenGate)简介及搭建过程

    GoldenGate公司简介 GoldenGate公司专注于数据同步领域,是实现数据同步技术的领导者.至2007年,在全球35个国家售出超过2000个许可证,客户分布在政府.银行.电信.证券.传媒.医 ...

  6. [转帖]如何获得一个RAC Oracle数据库(从Github - oracle/docker-images) - 本地版 ---暂时未做实验.

    如何获得一个RAC Oracle数据库(从Github - oracle/docker-images) - 本地版 2019-11-09 16:35:30 dingdingfish 阅读数 32更多 ...

  7. Oracle 11g XE 是 Oracle 数据库的免费版本

    Oracle 11g XE 是 Oracle 数据库的免费版本,支持标准版的大部分功能,11g XE 提供 Windows 和 Linux 版本. 做为免费的 Oracle 数据库版本,XE 的限制是 ...

  8. linux (centOS)安装 oracle 11g 以及卸载oracle

    目录 首先.1. 一.参数以及环境配置 1.创建用户和组 2.创建数据库软件目录和数据文件存放目录 3.配置oracle用户的环境变量 4.修改linux内核,修改/etc/sysctl.conf文件 ...

  9. Quick and Easy Installation of Oracle Database 12c on Oracle Linux in Oracle VM VirtualBox

    发贴人 Sergio-Oracle 于2018-4-18 23:10:15在Oracle Linux Introduction How Does This Work? Requirements Bef ...

随机推荐

  1. jQuery学习笔记(8)--表格筛选

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...

  2. lasso the moon

  3. 【题解】P3599 Koishi Loves Construction

    [题解]P3599 Koishi Loves Construction \(\mod n\) 考虑如何构造,发现\(n\)一定在第一位,不然不行.\(n\)一定是偶数或者是\(1\),不然 \(n|\ ...

  4. Flask:工厂函数和蓝本

    我们用pycharm去新建Flask项目的时候,会默认生成开发文件.如下,其中包括static,templates,flask1_prj.py文件 在最初开始的时候,我们的app等声明都是在flask ...

  5. angularJs自定义模块

    <script type="text/javascript"> var myApp = angular.module("myApp",[]); my ...

  6. HDU - 1541 Stars 【树状数组】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1541 题意 求每个等级的星星有多少个 当前这个星星的左下角 有多少个 星星 它的等级就是多少 和它同一 ...

  7. Spark与缓存

    预期成果 1.1   当前问题 当前以图搜图应用存在的问题: 当前使用spark RDD方案无法达到数据实时加载(每10分钟加载一次,虽然可配,但太短可能会有问题) Spark RDD内存会被分为两部 ...

  8. haproxysocket 参数记录

    haproxy的一些指标 pxname  组名 svname  服务器名 qcur    当前队列 qmax    最大队列 scur当前会话用户 smax最大会话用户 slim会话限制 stot会话 ...

  9. HDU 4405 Aeroplane chess:期望dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4405 题意: 你在下简化版飞行棋... 棋盘为一个线段,长度为n. 上面有m对传送门,可以直接将你从a ...

  10. PHP的深copy和浅copy

    1.对象复制的由来 为什么对象会有“复制”这个概念,这与PHP5中对象的传值方式是密切相关的,让我们看看下面这段简单的代码 /** * 电视机类 */ class Television { /** * ...