2016-06-09 52 views
0

我做了一個更新後的觸發器,我打算用它作爲審計日誌來更改源表中的主記錄。一切都按預期工作,除非我查看觸發器的定義,我可以看到它解析了MYLIB.NMF00PAUDI和OTBL的所有列,這意味着我必須爲添加到源和審計表中的每個列重新創建此觸發器。DB2觸發器OLD_TABLE動態列

我可以以某種方式保留SELECT *嗎?這樣我只需要修改源和審計表。

CREATE TRIGGER MYLIB.NMF00PAUDIT 
    AFTER UPDATE ON MYLIB.NMF00P 
    REFERENCING OLD_TABLE AS OTBL 
    FOR EACH ROW 
     MODE DB2SQL 
     BEGIN ATOMIC 
      INSERT INTO MYLIB . NMF00PAUDI 
      SELECT * FROM OTBL 
    ; 
END 

變爲這個當我查看定義:

BEGIN ATOMIC 
    INSERT INTO MYLIB . NMF00PAUDI (COL1, COL2, COL3) 
    SELECT COL1, COL2, COL3 FROM OTBL 
    ; 
END 
+0

您是否嘗試過更改源代碼和審計表以及您的觸發器會發生什麼? DB2跟蹤對象之間的依賴關係並重新綁定/重新編譯它們(如果有更改)。 –

回答

1

你能自動觸發定義的創建(或者與一個奇特的文本模板工具,甚至只是一個簡單的腳本),可以找到來自sysibm.syscolumns的列並使用所有當前列生成觸發器正文?然後,只要表格模式發生變化,您只需重新生成腳本並重新應用觸發器即可覆蓋新字段。

+0

好主意,我認爲這是可行的。我現在只需使用與*(星號)腳本相同的'CREATE TRIGGER',並在創建語句之前的一個步驟中簡單地添加'DROP TRIGGER'。每當我更改我的源代碼和審計表時,我都需要這樣做,但我想我也需要使用您提出的解決方案來完成它。 – Iztoksson