利用DBMS_SESSION.SET_CONTEXT傳值
公司的應用有一需求:
現有一需求,需要在行級觸發器執行儲存在資料庫表當中的一段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;
現有一需求,需要在行級觸發器執行儲存在資料庫表當中的一段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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- iOS開發之利用Block逆向傳值iOSBloC
- 如何利用javascript實現頁面間互相傳值JavaScript
- IOS學習筆記(頁面傳值:屬性傳值,協議代理傳值,閉包傳值)iOS筆記協議
- iOS Block傳值、代理傳值、通知中心iOSBloC
- vue父子傳值與非父子傳值Vue
- 筆記2:vue元件傳值--子傳父(利用this.$emit)--比小白還白的理解筆記Vue元件MIT
- Java傳參傳值Java
- 元件:非父子間傳值(同級傳值)元件
- iOS傳值iOS
- Vue--子元件互相傳值,子元件來回傳值,傳值反覆橫跳Vue元件
- 筆記1:vue 利用props 父到子元件傳值(初識元件)筆記Vue元件
- Android 元件系列-----Activity的傳值和回傳值Android元件
- 值傳遞和引用傳遞
- 值傳遞與引用傳遞
- Vue 元件傳值Vue元件
- 窗體間利用屬性(property)來傳遞值時應注意的問題。
- Intent傳值與Bundle傳值的區別(原始碼分析)Intent原始碼
- Vue 路由傳值(傳參)詳解Vue路由
- 網頁間傳值怎麼傳網頁
- JAVA值傳參和引用傳參Java
- Mybatis中List傳值MyBatis
- Vue 元件間傳值Vue元件
- iOS block 反向傳值iOSBloC
- Java只有值傳遞Java
- Fragment傳值到ActivityFragment
- javasript 按值傳遞Java
- iOS 常用傳值方式iOS
- swift 閉包傳值Swift
- block,代理,通知傳值BloC
- Razor傳值到jsJS
- PHP後臺傳值PHP
- 如何利用機器學習創造價值?機器學習
- js 利用||和&&賦值小技巧JS賦值
- 利用ssh傳輸檔案
- 在matlab中利用遺傳演算法(GA)求取函式全域性最大值Matlab演算法函式
- JavaScript的值傳遞和引用傳遞JavaScript
- 快速搞懂值傳遞與引用傳遞
- C語言的傳值與傳地址C語言