下面的 PL/SQL 沒有按預期作業要求是洗掉觸發器(如果存在)。以下僅洗掉第一個觸發器。
BEGIN
EXECUTE IMMEDIATE 'DROP TRIGGER ' || 'trigger1';
EXECUTE IMMEDIATE 'DROP TRIGGER ' || 'trigger2';
EXECUTE IMMEDIATE 'DROP TRIGGER ' || 'trigger3';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -4080 THEN
RAISE;
END IF;
END;
uj5u.com熱心網友回復:
如果第一個或第二個觸發器不存在,那么您將轉到例外處理程式。即使您忽略錯誤,它也不會回傳到原始程式流程,并且它永遠不會看到或嘗試以后的動態呼叫。
您需要圍繞每個單獨的 drop 使用例外處理程式。
為了減少重復,您可以在回圈中或使用本地程序執行此操作:
DECLARE
PROCEDURE drop_trigger(p_trigger_name user_triggers.trigger_name%type) IS
BEGIN
EXECUTE IMMEDIATE 'DROP TRIGGER ' || p_trigger_name;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -4080 THEN
RAISE;
END IF;
END drop_trigger;
BEGIN
drop_trigger('trigger1');
drop_trigger('trigger2');
drop_trigger('trigger3');
END;
/
db<>小提琴
您還可以添加除錯,使用dbms_output,以查看發生了什么 - 就像在這個修改后的 db<>fiddle中一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/488364.html
上一篇:如何從存盤程序中洗掉單個引號
