2016-06-09 7 views
0

Ich machte einen After-Update-Trigger, den ich als Überwachungsprotokoll für Änderungen am primären Datensatz in der Quellentabelle verwenden wollte. Alles funktioniert wie erwartet, außer wenn ich die Definition meines Auslösers sehe Ich kann sehen, dass es alle Spalten für MYLIB.NMF00PAUDI und OTBL aufgelöst hat, was bedeutet, dass ich diesen Auslöser für jede Spalte neu erstellen muss, die ich in Quell- und Prüftabellen hinzufüge.DB2 Trigger OLD_TABLE dynamische Spalten

Kann ich irgendwie SELECT * behalten? Auf diese Weise muss ich nur Quell- und Audit-Tabellen ändern.

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 

wird dies, wenn ich die Definition anzuzeigen:

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

Haben Sie versucht, die Quell- und Audit-Tabelle zu ändern und was passiert mit Ihrem Trigger? DB2 verfolgt Abhängigkeiten zwischen Objekten und bindet/rekompiliert sie bei Änderungen erneut. –

Antwort

1

Könnten Sie die Erstellung der Trigger-Definition automatisieren (entweder mit einem fantastischen Tool Text Templat oder auch nur ein einfaches Skript), die das finden konnte, Spalten aus sysibm.syscolumns und generieren Sie Ihren Trigger-Körper mit allen aktuellen Spalten? Jedes Mal, wenn sich das Tabellenschema ändert, generieren Sie das Skript einfach neu und wenden den Trigger erneut an, um das neue Feld abzudecken.

+0

Großartige Idee, ich denke, es wäre machbar. Ich benutze jetzt einfach den gleichen 'CREATE TRIGGER' mit einem * (Stern) -Skript und füge einfach einen' DROP TRIGGER' in einen Schritt vor der Create-Anweisung ein. Ich muss es jedes Mal tun, wenn ich meine Quell- und Audit-Tabellen ändere, aber ich denke, ich müsste es auch mit Ihrer vorgeschlagenen Lösung machen. – Iztoksson

Verwandte Themen