利用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;
![](https://i.iter01.com/images/38e394d64a372a5bc35f27132aedfbcc5bed27a41c03369f94c15b6ecc282e41.jpg)
現有一需求,需要在行級觸發器執行儲存在資料庫表當中的一段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;
![](https://i.iter01.com/images/38e394d64a372a5bc35f27132aedfbcc5bed27a41c03369f94c15b6ecc282e41.jpg)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8520577/viewspace-1061420/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 筆記2:vue元件傳值--子傳父(利用this.$emit)--比小白還白的理解筆記Vue元件MIT
- iOS Block傳值、代理傳值、通知中心iOSBloC
- vue父子傳值與非父子傳值Vue
- 筆記1:vue 利用props 父到子元件傳值(初識元件)筆記Vue元件
- Java傳參傳值Java
- 元件:非父子間傳值(同級傳值)元件
- Vue--子元件互相傳值,子元件來回傳值,傳值反覆橫跳Vue元件
- 值傳遞和引用傳遞
- Vue 元件傳值Vue元件
- java值傳遞Java
- 按值傳遞
- 在matlab中利用遺傳演算法(GA)求取函式全域性最大值Matlab演算法函式
- js 利用||和&&賦值小技巧JS賦值
- Vue 路由傳值(傳參)詳解Vue路由
- shared_ptr 傳值和傳引用
- 窗體傳值 父子窗體傳值情況 c# 1231C#
- Vue 元件間傳值Vue元件
- Fragment傳值到ActivityFragment
- Mybatis中List傳值MyBatis
- Java只有值傳遞Java
- iOS block 反向傳值iOSBloC
- python中傳值和傳地址問題Python
- JavaScript的值傳遞和引用傳遞JavaScript
- 快速搞懂值傳遞與引用傳遞
- Java的值傳遞和引用傳遞Java
- web中,利用反射給物件賦值Web反射物件賦值
- 利用閉包傳遞引數
- 父往子傳,子往父傳,以及平行傳值
- JavaScript之按值傳遞JavaScript
- vue和react元件傳值VueReact元件
- Memory記憶體傳值記憶體
- Flutter 命名路由及傳值 !Flutter路由
- Vue之元件間傳值Vue元件
- python的賦值傳遞Python賦值
- 引數傳值機制
- go 值傳遞和地址傳遞的例子Go
- Day30--值傳遞和引用傳遞
- Java - 是值傳遞還是引用傳遞Java
- 有效利用,你的信用價值何止百萬?