firebird - after insert-oder update-trigger
Ich habe eine Berechnung in meine DB aktualisieren "Feld1" für "Tabelle1", nachdem der update-trigger.
Das problem, dass die Aktualisierung wird das Feld führen, dass der after update-trigger ausgelöst, und führen Sie eine langwierige Prozedur und Fehler anzeigen.
bitte beraten, wie Sie das update "Feld1", nachdem der "Nach dem update" trigger ausgeführt wurde und ohne dass die "nach dem update" trigger wieder ausgeführt wird.
Ich weiß, dass ich nicht verwenden können, NEUE mit After-trigger.
Dank
wie über die Verwendung der BEFORE UPDATE-trigger?
"Ich weiß, dass ich nicht verwenden Sie NEUE mit Nach Abzug." Warum? ALTE und NEUE meta-Variablen sind für beide VOR und NACH dem UPDATE-Trigger.
Die OP bedeutet wohl, dass man nicht schreiben in
Genau............
"Ich weiß, dass ich nicht verwenden Sie NEUE mit Nach Abzug." Warum? ALTE und NEUE meta-Variablen sind für beide VOR und NACH dem UPDATE-Trigger.
Die OP bedeutet wohl, dass man nicht schreiben in
NEW
Kontext-variable in der AFTER-trigger. Sie zu Lesen ist natürlich OK...Genau............
InformationsquelleAutor Wel | 2012-02-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann man verwenden, um ein benutzerdefiniertes sperren-Mechanismus auf der Grundlage von Kontext-Variablen, die verhindern, dass aus dem wiederholten Aufruf der AFTER UPDATE-trigger.
WENN JEDER Abschnitt hier ist für Versicherung, dass die Sperre erlischt, wenn Sie etwas falsch beantwortet. AUSNAHME ist hier für das erneute auslösen der Ausnahme, wenn alle.
ic-vielen Dank.....
1) "kann ich mit "aktualisieren"..." -- in, NACH oder VOR einem UPDATE löst die AKTUALISIERUNG metavariable wird immer WAHR. 2) "besser, zu BEENDEN oder zu suspendieren" - das ist der trigger, keine stored proc. AUSSETZEN ist nicht anwendbar für die Trigger. Für gespeicherte Prozeduren AUSZUSETZEN, ist für die Rücksendung Zeile in WÄHLBAREN Verfahren.
vielen Dank..........
InformationsquelleAutor Andrej Kirejeŭ
Die offensichtliche Antwort ist die Umstellung auf die
BEFORE UPDATE
auslösen, wie bereits von J Cooper... allerdings, wenn aus irgendeinem Grund Sie unbedingt zu verwendenAFTER UPDATE
dann musst du eine fahne, die sagt, dass das Feld muss neu berechnet werden, und überprüfen Sie es in Ihr auslösen. Ein Weg, es zu tun wäre, um das Feld zuNULL
imBEFORE
auslösen und überprüfen Sie dann gegen NULL inAFTER
auslösen, dhAber mit dieser Technik, die Sie wahrscheinlich verwenden viel
IF(OLD.field IS DISTINCT FROM NEW.field)THEN
Prüfungen in Triggern zu vermeiden unnessesary updates in Ihr auslöst.InformationsquelleAutor ain
einfache Lösung...
Feuer das update nur wenn die NEUE.FELD1-Wert ist wirklich neu, wie diese:
InformationsquelleAutor Marco
Lösung: Verwenden Sie
BEFORE UPDATE TRIGGER
stattAFTER UPDATE TRIGGER
InformationsquelleAutor J Cooper