[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2005
    Beiträge
    23

    Trigger before insert

    Hallo zusammen,

    ich habe hier den Fall, dass ein RPG WRITE bei einer Datei , bei der ein *BEFORE *INSERT Trigger hinterlegt ist, durchgeführt werden soll.

    Schlägt jetzt das WRITE fehl (Fehlerbezugszahl ist an), wird trotzdem der Trigger aufgerufen.

    Ist das so per Design gewollt oder ist das ein Problem, was gefixt werden muss?

    Grüße
    Jürgen

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.532
    Ein BEFORE INSERT Trigger wird aktiviert, BEVOR der Satz geschrieben wird.
    Wenn also Dein WRITE aufschlägt ist der Trigger bereits ausgeführt worden.

    Wenn der Trigger erst nachdem Dein Satz ordnungsgemäß eingefügt wurde aktiviert werden soll, hätte ein AFTER INSERT Trigger erstellt werden müssen.

    Birgitta
    Birgitta Hauser

    Contractor for Fresche Solutions Inc.
    Anwendungsmodernisierung, Beratung, Schulungen im Bereich RPG, SQL und Datenbank

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    18.104
    Ja, das ist generell ein Problem, dass ein Before-Trigger aufgerufen wird, bevor die Constraints wie Unique-Key geprüft werden.
    Da man den After-Insert-Buffer ja (falls erlaubt) ändern kann, hat man u.U. die Gelegenheit, fehlende Daten zu ergänzen. Wenn man ein Protokoll schreibt hat dies gewisse Vorteile, da man dort auch Versuche protokollieren kann.
    Bei Commitsteuerung sieht es etwas anders aus, da dann der Aufrufer im Fehlerfall einen Rollback durchführen kann.
    Ist die Protokolldatei journalisiert und läuft der Trigger und das Protokoll unter Commit, wird auch diese Änderung rükgängig gemacht.

    Willst du den After-Insert-Buffer nicht ändern sondern nur andere Tabellen mit ändern, so führe einen After-Insert-Trigger aus. Dann werden erst die Constraints geprüft bevor der Trigger aufgerufen wird.
    Du kannst dann allerdings keine Daten des aktuellen Satzes mehr ändern.
    Vorsicht ist dann auch unter Commitsteuerung mit ggf. einer eigenen ACTGRP, denn dann kann man beim Zugriff auf denselben Satz Deadlock (mit Satztimeot) provozieren.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Jan 2005
    Beiträge
    23
    Oje,

    Danke für die Info.

    ich hatte angenommen, dass der before trigger aufgerufen wird, nachdem die Constraints durch sind und bevor dann wirklich geschrieben oder geupdated wird.

    Dann gilt das wohl auch für die before trigger von update und delete.

    Jürgen

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    18.104
    Das ist korrekt.
    Deshalb unterstützt z.B. der Microsoft SQL-Server keine Before-Trigger sondern ausschließlich After-Trigger (wobei diese auch nicht je Satz sondern je Operation aufgerufen werden).

    Möchte man da einen Before-Trigger, muss man dies als Instead-Of-Trigger lösen (gibts bei DB2 auch).
    Dies ist dann in so weit logischer, als dass der Trigger aufgerufen und gar keine DB-Operationen durchgeführt werden. Diese müssen nämlich dann im Trigger selber gemacht werden.

    Vorteil (je nach Ansicht) von Instead-Of ist, dass man da einen Trigger auf Views und Joins legen kann so dass der Trigger die Verteilung in die Tabellen übernimmt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

Ähnliche Themen

  1. INSERT INTO Datenumsetzung ?
    Von volkerK im Forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 10-08-18, 13:47
  2. INSERT-Problem
    Von AKS1 im Forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 26-03-18, 16:01
  3. insert 32768
    Von Armin im Forum NEWSboard Programmierung
    Antworten: 17
    Letzter Beitrag: 19-12-14, 12:07
  4. SQL V5R4 Insert into
    Von KingofKning im Forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 10-10-14, 08:13
  5. RPGLE Trigger before insert übernimmt neue Werte nicht
    Von msost im Forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 07-10-14, 13:15

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •