公司的应用有一需求:
现有一需求,需要在行级触发器执行存储在数据库表当中的一段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, :o ld值?
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, :o ld值?
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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8520577/viewspace-1061420/