Hallo alle zusammen.
Ich habe versucht einen Datenbank Trigger auf das Ereignis "TRANSACTION ROLLBACK" zu erzeugen.
Der sieht wie folgt aus.
Kurzbeschreibung:
Wenn eine Transaktion Rückabgewickelt wird, soll in einer Logtabelle ein Eintrag vorgenommen werden.
Problem:
Beim einem Rollback wird kein Eintrag in der Logtabelle vorgenommen.
Ich vermute das liegt daran, dass der Aufruf des Triggers im Kontext der Transaktion ausgeführt wird, die
gerade Rückabgewickelt werden soll. Dementsprechend wird auch der Eintrag in der Logtabelle wieder
Rückgängig gemacht.
Wenn ich den Trigger auf das Ereignis "TRANSACTION COMMIT" setze funktionierts, daher meine
Vermutung.
Hat jemand eine Idee wie ich das hinkriegen kann ?
Google hat da leider auch nicht viel hergegeben.
Was macht man eigentlich mit einem Trigger, beim dem alle Aktionen nach dem Verlassen
wieder rückgängig gemacht werden (falls dem so ist) ?
Im Einsatz ist übrigens Firebird 2.1.3.18185
An alle schon mal vielen Dank für die Mühe
Peter
Ich habe versucht einen Datenbank Trigger auf das Ereignis "TRANSACTION ROLLBACK" zu erzeugen.
Der sieht wie folgt aus.
Code:
CREATE OR ALTER TRIGGER LOG$TRANSACTION_ROLLBACK_0 ACTIVE ON TRANSACTION ROLLBACK POSITION 0 AS DECLARE VARIABLE MonUser VARCHAR(64); DECLARE VARIABLE MonRemoteAddress VARCHAR(253) CHARACTER SET ASCII; DECLARE VARIABLE MonRemotePid INTEGER; DECLARE VARIABLE MonRemoteProcess VARCHAR(253); BEGIN SELECT att.mon$user, att.mon$remote_address, att.mon$remote_pid, att.mon$remote_process FROM mon$transactions ta JOIN mon$attachments att ON (ta.mon$attachment_id=att.mon$attachment_id) WHERE (ta.mon$transaction_id=CURRENT_TRANSACTION) INTO :MonUser, :MonRemoteAddress, :MonRemotePid, :MonRemoteProcess; INSERT INTO log$transaction_log (transaction_number, transaction_type, mon$user, mon$remote_address, mon$remote_pid, mon$remote_process) VALUES (CURRENT_TRANSACTION, 'R', :MonUser, :MonRemoteAddress, :MonRemotePid, :MonRemoteProcess); END
Wenn eine Transaktion Rückabgewickelt wird, soll in einer Logtabelle ein Eintrag vorgenommen werden.
Problem:
Beim einem Rollback wird kein Eintrag in der Logtabelle vorgenommen.
Ich vermute das liegt daran, dass der Aufruf des Triggers im Kontext der Transaktion ausgeführt wird, die
gerade Rückabgewickelt werden soll. Dementsprechend wird auch der Eintrag in der Logtabelle wieder
Rückgängig gemacht.
Wenn ich den Trigger auf das Ereignis "TRANSACTION COMMIT" setze funktionierts, daher meine
Vermutung.
Hat jemand eine Idee wie ich das hinkriegen kann ?
Google hat da leider auch nicht viel hergegeben.
Was macht man eigentlich mit einem Trigger, beim dem alle Aktionen nach dem Verlassen
wieder rückgängig gemacht werden (falls dem so ist) ?
Im Einsatz ist übrigens Firebird 2.1.3.18185
An alle schon mal vielen Dank für die Mühe
Peter
Comment