-
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
-
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
-
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.
-
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
-
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.
Similar Threads
-
By volkerK in forum NEWSboard Programmierung
Antworten: 9
Letzter Beitrag: 10-08-18, 13:47
-
By AKS1 in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 26-03-18, 16:01
-
By Armin in forum NEWSboard Programmierung
Antworten: 17
Letzter Beitrag: 19-12-14, 12:07
-
By KingofKning in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 10-10-14, 08:13
-
By msost in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 07-10-14, 13:15
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks