利用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

相關文章
相關標籤/搜索