4
我可以暂时禁用oracle存储过程中的触发器吗?我可以在Oracle存储过程中暂时禁用触发器吗?
示例(伪代码):
MyProcedure{
disable MyTrigger;
//doStuff
enable MyTrigger;
};
Thx提前。 Giuseppe
我可以暂时禁用oracle存储过程中的触发器吗?我可以在Oracle存储过程中暂时禁用触发器吗?
示例(伪代码):
MyProcedure{
disable MyTrigger;
//doStuff
enable MyTrigger;
};
Thx提前。 Giuseppe
您可以使用EXECUTE IMMEDIATE语法通过动态SQL发出DDL,例如“ALTER TRIGGER”语句。
那说明是在这里: http://download.oracle.com/docs/cd/B12037_01/appdev.101/b10807/13_elems017.htm
PROCEDURE myProcedure
IS
BEGIN
EXECUTE IMMEDIATE 'ALTER TRIGGER triggername DISABLE';
-- Do work
EXECUTE IMMEDIATE 'ALTER TRIGGER triggername ENABLE';
EXCEPTION
WHEN OTHERS
THEN
-- Handle Exceptions
END myProcedure;
您可以构建使用VARCHAR变量的动态SQL太多,如果你喜欢:
PROCEDURE myProcedure
IS
v_triggername VARCHAR2(30) := 'triggername';
BEGIN
EXECUTE IMMEDIATE 'ALTER TRIGGER '||v_triggername||' DISABLE';
-- Do work
EXECUTE IMMEDIATE 'ALTER TRIGGER '||v_triggername||' ENABLE';
EXCEPTION
WHEN OTHERS
THEN
-- Handle Exceptions
END myProcedure;
如果你这样做,那么你也应该查看包DBMS_ASSERT来包装触发器名称,并帮助强化您的代码以防SQL注入攻击。
这正是我想要的。 thx男人! – Giuseppe
很高兴我能帮到你。 – Ollie
@giuseppe要小心:修改触发器是ddl - >它会提交。 –