[NEWSboard IBMi Forum]
Seite 4 von 4 Erste ... 3 4
  1. #37
    Registriert seit
    Sep 2004
    Beiträge
    327
    Zitat Zitat von Fuerchau Beitrag anzeigen

    Aber noch mal auf Anfang zurück:
    "und im Trigger Programm einen chain und update gemacht."

    Warum machst du keinen Before-Trigger, hatte ich oben schon mal gefragt?
    Dann ergänzt du die Daten nur im Datenpuffer "Before-Image" und der Write erfolgt dann nach dem Trigger.
    Beim ADDPFTRG muss dann ALWREPCHG(*YES) gesetzt werden um Pufferänderungen zu erlauben.
    Oh mein Gott, ich hatte Deinen Kommentar komplett überlesen. Natürlich, der BEFORE Trigger löst alles. Im Trigger Programm muss keine Dateioperation gemacht werden, es wird lediglich der Puffer verändert.
    Habe es gerade umgebaut, funktioniert tadellos.
    Vielen Dank für Deine Hartnäckigkeit.

  2. #38
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Du kannst froh sein, dass wir auf der DB2 for i sind.
    Der SQL-Server kennt in all den Jahrzehnten bis heute keinen Before-Trigger.
    Es gibt nur einen After-Trigger.
    Dieser bekommt dann 2 zusätzlichen Tabellen für die Auswertung:
    - Inserted: Sätzen die hinzugefügt wurden
    - Deleted: Sätze die gelöscht wurden.
    Ein Trigger wird für eine Aktion nur genau 1x aufgerufen, auch und gerade dann wenn mehrere Zeilen betroffen wurden.

    Beispiel:
    Bei einem "Insert into ... select from ... " enthält die Tabelle inserted eine Kopie aller Zeilen die eingefügt wurden.
    Bei einem "update table set .... where ...." führt der SQL-Server keinen Update sondern einen Delete/Insert aus und anschließend wird der Trigger aufgerufen.
    Nun musst du dir halt die passenden Before/After-Images per
    "select * from inserted a inner join deleted b on a.Key = b.Key"
    zusammen suchen und alles mit Cursor durcharbeiten.
    Beachte dabei, dass die temporären Tabellen ja keinen Index haben.

    Machst du dann einen erneuten Update auf die Zieltabelle wirds heftig.
    Hier erstellt der SQL-Server jetzt "Satzversionen" in weiteren temporären Inserted/Deleted Tabellen und ruft den Trigger anschließend ein 2. Mal auf.
    Dadurch gibts nämlich keine Rekursion sondern eine Iteration, die natürlich in der Anzahl beschränkt ist.

    Also mit SQL-Server ist das alles ganz schön kompliziert.
    Die Microsoft-Spezies empfehlen daher, alle Logik in SQL-Prozeduren zu kapseln und auch Trannsaktionen in diesen durchzuführen.
    Damit auch wirklich nicht irgendwelche Transaktionen über Clientzugriffe die gesamte DB lahmlegen können.
    Also alle Insert/Update/Delete per z.B. "call sp_MyTableInsert(p1, p2, ...)". Da ist man dann tatsächlich gezwungen z.T. sehr große Prozeduren zu schreiben, da ja eine Transaktion, wie geschrieben, durchaus zig Tabellen betreffen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #39
    Registriert seit
    Sep 2004
    Beiträge
    327
    Ja, vom SQL Server weiß ich das, deshalb war ich auch auf den after trigger so fixiert. Vielen Dank nochmals für die Hilfe und Deinen konkreten Ausführungen.

Similar Threads

  1. Antworten: 1
    Letzter Beitrag: 22-03-19, 16:52
  2. Journal auswerten
    By rr2001 in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 03-09-15, 07:37
  3. Journal Receiver
    By KingofKning in forum IBM i Hauptforum
    Antworten: 14
    Letzter Beitrag: 10-03-15, 14:29
  4. Journal abhängen
    By Mädele in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 26-12-05, 09:43
  5. Backup über Journal ?
    By Wirnitzer in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 17-10-01, 10:13

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •