利用DBMS_SESSION.SET_CONTEXT傳值

peng163fj發表於2015-04-13
公司的應用有一需求:
     現有一需求,需要在行級觸發器執行儲存在資料庫表當中的一段PL/SQL指令碼
類似於

CREATE OR REPLACE TRIGGER tr_emp
  AFTER UPDATE OR INSERT ON emp
  FOR EACH ROW
DECLARE
  cursor cur_emp is select sysdate from dua;
  v_empno emp.empno%TYPE;
BEGIN
  dbms_output.put_line('11111');
  execute immediate 'begin update a; update b end;' --此處指令碼是從其他表讀出來的
END;


現在的問題是,有沒有一個方法可以讓這段指令碼能看到觸發器裡的所有:new, :old值?

http://www.itpub.net/forum.php?mod=viewthread&tid=1831372&page=1#pid21933580


受到newkid大俠的指引,研究了一下dbms_session.set_context。

首先,使用者要有create any context的許可權,可以將context看成是名稱空間

建立一個過程:
create procedure set_attrbute(p_attribue in varchar2, p_value in varchar2) is
begin
  dbms_session.set_context('MY_CONTEXT', p_attribue, p_app_user);
end;

建立context:
create context MY_CONTEXT using set_attrbute; --這裡的MY_CONTEXT就是剛剛在過程裡指定過的

設定值:

begin
  set_attrbute('A', 'ABC');
end;

取值:
select sys_context('MY_CONTEXT', 'A') from dual;






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8520577/viewspace-1061420/,如需轉載,請註明出處,否則將追究法律責任。

相關文章