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 - >它會提交。 –