Trigger
DB2 刪除觸發器(如果存在)?
在 MySQL 中,如果我有架構
myschema
和一個名為的觸發器,mytriggername
我可以刪除一個觸發器,如下所示DROP TRIGGER IF EXISTS myschema.mytriggername
無論如何,我在 DB2 文件中找不到DROP語句的任何對應
DROP TRIGGER IF EXISTS
語句?有什麼建議嗎?
另一種方法是
FOR
循環只DROP
為存在的對象執行語句。坦率地說,這對於單個對象來說是多餘的,但在處理模式負載時它很有用。例如:BEGIN ATOMIC FOR D AS SELECT 'DROP TRIGGER ' || TRIGNAME AS DDL FROM SYSCAT.TRIGGERS WHERE TRIGSCHEMA = 'SOMESCHEMA' AND TRIGNAME = 'SOMETRIGGER' DO EXECUTE IMMEDIATE D.DDL; END FOR; END@
很久以前,我在DROP_SCHEMA常式中使用了類似的技巧(頁面底部的源連結),儘管它現在是多餘的。
上述技巧也可用於“僅那些存在的對象”和/或“僅那些不存在的對象”的條件升級。
對於實際的模式創建,我通常更喜歡保留一個“乾淨的”創建腳本(沒有條件的東西)和一個單獨的“刪除”腳本來清理東西。如果這聽起來像是為自己做多餘的工作,那麼可以使用某些技巧來從創建腳本生成 drop 腳本(使用來反轉安裝腳本,以及將語句轉換為
tac
的一點正則表達式魔法;這確實意味著模糊除非您希望正則表達式變得非常混亂,否則在您如何格式化 SQL 方面受到紀律處分)。CREATE``DROP