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

    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.869
    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

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

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Jan 2005
    Beiträge
    31
    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
    20.207
    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: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

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

Berechtigungen

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