Trigger

DB2 刪除觸發器(如果存在)?

  • September 2, 2017

在 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

引用自:https://dba.stackexchange.com/questions/184898