[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2006
    Beiträge
    82

    Trigger erst nach Commit ausführen

    Hallo *ALL,

    gibt es eine Möglichkeit dem Trigger beizubringen, dass er bei einem Update erst NACH Ausführung des COMMIT ausgelöst werden soll?

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Was willst Du denn damit erreichen?
    Trigger sind dazu da um Datenkonsistenz zu gewährleisten. Wenn der Trigger erst nach dem Commit ausgeführt wird, ist die Datenkonsistenz nicht mehr gewährleistet.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Jan 2006
    Beiträge
    82
    ich habe mir gedacht das diese Antwort kommt
    Der Trigger soll, nachdem ein Satz commited wurde eine Schnittstellenaktion auslösen

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Ich glaube nicht dass das möglich ist.
    Und nebenbei kann ich dir auch nur davon abraten, die Datenbank mit den Programmen so eng zu verheiraten.
    Eine Trennung zwischen Datenbanklogik und Programmlogik sollte es schon geben.

    lg Andreas

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... da gibt es keine wirklich einfachen Lösungen. Man könnte die Aktion zurücknehmbar machen und bei Rollback quasi stornieren oder man könnte den dornigen Weg über die Registrierung einer Commit Ressource gehen. Weniger komplex wäre es allerdings das in die Applikation einzubauen.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Jun 2001
    Beiträge
    2.044

    wir machen das ungefähr so:

    Wenn die den Auslöser eindeutig identifizieren kannst geht es z.B. so:

    Schreibe mit dem Trigger die Schnittstellen Daten in ein PF
    (mit User, Jobnr ..)
    Beim Rollback setzt du einen Wert in eine dtaara.
    Der Trigger löscht bei gesetzter Dtaara den Satz wieder.
    Dort, wo der commit stattfindet (oder am Ende des Jobs)
    je nachdem wo du rankommst arebitest du die Datei ab und fütterst die Schnittstelle
    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... das mit der DTAARA und löschen Gedöns kann man sich vollständig sparen: einfach das schreiben in diese Datei mit unter derselben Commit Definition laufen lassen, dann passiert das alles automatisch. Vom Design her bleibt das Problem, dass man nicht weiß wielange man warten soll (der Rollback könnte Stunden auf sich warten lassen); lösen könnte man dies allerdings im asynchronen Ansatz, indem man mit Locklevel read commited liest.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Ist zwar etwas komplizierter, aber mit Commit-Ressourcen (nicht Dateiabhängig) kann man hier ggf. was steuern:

    Commitment Control Exit Program

    Das Problem ist sicherlich, zu erkennen, ob in der Datei entsprechende Informationen zur Verfügung stehen.

    Aber ein Trigger auf der Datei kann ja eine 2. Datei befüllen, die im Rollbackfall ebenso gelöscht wird.

    Die Commitressource kann also im Commit-Fall eine Aktion auslösen, wenn in der Logdatei Daten vorhanden sind.
    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

  9. #9
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    einfach das schreiben in diese Datei mit unter derselben Commit Definition laufen lassen
    Ja, das hatten wir zuerst auch.
    Aber es gab einen Grund, (der mir nicht mehr einfällt) das zurück zu drehen (ist schon ein paar Jahre her)

    Versuch's halt

    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Betrachte noch mal Dieters Ansatz:
    Unter Commit bleibt ein Update/Insert gesperrt, bis er Committed ist.

    Wenn die Aktion also asynchron (z.B. über DTAQ) gestartet ist und dort natürlich auch unter Commit gearbeitet wird, wird bei einem "Read for Update" eben solange gewartet, bis die Sperre aufgehoben (Commited/Rolledback) ist.
    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

Similar Threads

  1. Programm auf "ferner" AS400 ausführen.
    By Souljumper in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 13-05-09, 19:50
  2. SQL Trigger
    By Jenne in forum NEWSboard Programmierung
    Antworten: 0
    Letzter Beitrag: 19-01-07, 09:24
  3. SQL Trigger
    By bigmoon in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 14-09-06, 18:26
  4. create view oder constraint oder trigger oder ... ?
    By antvik in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 02-08-06, 18:04
  5. Trigger / ILE RPG
    By Frank Pusch in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 17-05-01, 09:34

Berechtigungen

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