zoukankan      html  css  js  c++  java
  • 利用oracle session context 向oracle传值

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

  • 相关阅读:
    CNN5 调用 C实现pool2d im2col col2im
    CUDA学习3 Max pooling (python c++ cuda)
    CUDA学习2 基础知识和Julia示例
    CUDA学习1 在Visual Studio和CodeBlocks上配置
    线性搜索
    CNN4 参数优化
    CNN3 im2col
    CNN2 多层卷积
    爬虫:Scrapy8
    爬虫:Scrapy7
  • 原文地址:https://www.cnblogs.com/senline/p/10345006.html
Copyright © 2011-2022 走看看