Was passiert, wenn eine Ausnahme in einem TRIGGER ausgelöst wird?Ausnahmebehandlung in TRIGGERS (für jede Zeile)
nehmen wir an einen Tisch R haben (a, b, c, d, e) mit den Werten unter:
Nehmen wir nun an versuchen wir UPDATE R SET b = 2, c = 3 WHERE a = 1
mit dem Auslöser unten in Wirkung aufgeführt auszuführen:
CREATE TRIGGER fd_enforcer_update
BEFORE UPDATE on R
FOR EACH ROW
DECLARE counter INT
BEGIN
SELECT COUNT(*) INTO counter
FROM R
WHERE R.A = NEW.A AND R.B = NEW.B AND R.C <> NEW.C
AND NOT (R.A = OLD.A AND R.B = OLD.B AND R.C = OLD.C AND R.D = OLD.D AND R.E = OLD.E);
IF (counter > 0)
THEN raise_exception();
END;
Der obige Code geschrieben wird angeblich AB->C
die funktionale Abhängigkeit zu erzwingen.
Im obigen Beispiel betrifft die UPDATE
-Anweisung vier Zeilen. Da wir im Trigger FOR EACH ROW
angegeben haben, wird jede dieser 4 Zeilen überprüft.
Der Trigger überprüft die erste der vier Zeilen [1,1,2,3,4]
und löst eine Ausnahme aus. Was passiert jetzt? Wird der Trigger vollständig beendet? Oder überprüft es die anderen drei Zeilen noch?
Nachdem meine UPDATE
Anweisung ausgeführt wurde, wie viele Zeilen werden tatsächlich aktualisiert?
Eine Ausnahme wird im 'update' ausgelöst, so dass die 'update'-Anweisung beendet und Änderungen rückgängig gemacht werden. Das ist, was 'raise_exception()' tut. –
Bitte Daten als formatierten Test, [keine Screenshots] (http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking) -a-question/285557 # 285557) – Aleksej
Was ist passiert, als du es ausprobiert hast? –