我要丟失ORACLE中的現有觸發器。只有在DROP觸發器存在的情況下(ORACLE)
我知道drop
查詢觸發器oracle。但想知道如何檢查該觸發器是否已存在於Oracle DB中。
DROP查詢:
DROP TRIGGER **TRIGGER_NAME**
我要丟失ORACLE中的現有觸發器。只有在DROP觸發器存在的情況下(ORACLE)
我知道drop
查詢觸發器oracle。但想知道如何檢查該觸發器是否已存在於Oracle DB中。
DROP查詢:
DROP TRIGGER **TRIGGER_NAME**
你有兩個選擇:
1)檢查觸發存在
SELECT *
FROM user_triggers
WHERE trigger_name = '...'
2)跌落觸發和檢查異常
我的機器上沒有安裝ORACLE DB。所以原諒我這個蹩腳的問題。我想知道,如果從代碼端執行查詢{DROP TRIGGER TRIGGER_NAME},它會拋出錯誤而不處理任何異常?所有我需要做的就是放棄扳機。我需要爲此添加例外嗎? –
如果觸發器不存在並且您放棄它,則會出現異常。因此,您只需要混淆異常,導致'無論如何丟棄觸發':創建或替換觸發器my_trg 之前爲每行插入tmp 開始 null; 結束; BEGIN - 觸發器仍然存在 立即執行'DROP TRIGGER my_trg'; - 不再觸發,異常提出 立即執行'DROP TRIGGER my_trg'; EXCEPTION 何時其他 NULL; END; – hinotf
您需要一個具有動態SQL的PL/SQL塊:
-- drop the trigger if it exists
declare
l_count integer;
begin
select count(*)
into l_count
from user_triggers
where trigger_name = 'TRIGGER_NAME';
if l_count > 0 then
execute immediate 'drop trigger trigger_name';
end if;
end;
/
-- now create the trigger
create trigger trigger_name
..
begin
end;
/
注意(無引號)標識符被存儲在上殼體在Oracle系統目錄。因此,請確保在PL/SQL檢查中使用trigger_name = 'TRIGGER_NAME'
而不是trigger_name = 'trigger_name'
這是什麼原因?您不能執行查詢,如果它不存在則會拋出一個錯誤。如果它存在,它將被丟棄。 – brenners1302
您可以根據您的特權查詢'[user | all | dba] _triggers',無論您是否以觸發器的所有者身份登錄等。或者您可以簡單地刪除觸發器並捕獲異常。 –
我是一個** delphi **開發人員,我從代碼創建了這個** DROP **查詢。所以這是我用** oracle query **來檢查它的原因。 –