Sie können Trigger so einstellen, dass ihre Vorgänge deaktiviert werden, wenn Benutzer Aktionen für Spaltendaten ausführen (durch die der Trigger ausgelöst wird). Der Trigger kann weiterhin ausgelöst werden und seine Vorgänge können ausgeführt werden, und zwar mit einer Prozedur, die eine vordefinierte Verbindungsvariable enthält. Benutzer können anschließend INSERT-, ALTER- oder DELETE-Anweisungen auf Spalten anwenden, ohne dass die Trigger-Vorgänge ausgeführt werden, auch wenn der Trigger ausgelöst wird.
Wenn Sie mit einem Trigger auf Zeilenebene arbeiten, verwenden Sie eine WHEN-Klausel, um anzugeben, wann der Trigger ausgelöst werden soll.
In diesem Beispiel werden die Vorgänge eines Triggers in Abhängigkeit davon deaktiviert, ob eine Verbindungsvariable vorhanden ist.
Erstellen Sie einen AFTER INSERT-Trigger, der den Status einer Verbindungsvariablen prüft, um zu ermitteln, ob die Trigger-Logik aktiviert ist. Wenn die Variable nicht vorhanden ist, werden die Vorgänge des Triggers aktiviert:
CREATE TRIGGER myTrig AFTER INSERT REFERENCING NEW AS new-name FOR EACH STATEMENT BEGIN DECLARE @execute_trigger integer; IF varexists('enable_trigger_logic') = 1 THEN SET @execute_trigger = enable_trigger_logic; ELSE SET @execute_trigger = 1; END IF; IF @execute_trigger = 1 THEN ... -your-trigger-logic END IF; END; |
Fügen Sie Ihrer Anweisung den folgenden Code hinzu, um den in Schritt 1 erstellten Trigger aufzurufen. Die Anweisung verwendet eine Verbindungsvariable, um zu steuern, wann der Trigger deaktiviert wird, und muss den Code umschließen, den Sie deaktivieren möchten.
...
IF varexists('enable_trigger_logic') = 0 THEN
CREATE VARIABLE enable_trigger_logic INT;
END IF;
SET enable_trigger_logic = 0;
... execute-your-code-that-you-do-not-want-triggers-to-run
SET enable_trigger_logic = 1;
... now-your-trigger-logic-will-do-its-work |
In diesem Beispiel wird die auf einer Verbindungsvariablen basierende Methode aus Beispiel 1 verwendet, um die Vorgänge mehrerer Trigger zu steuern. Dabei werden zwei Prozeduren erstellt, die aufgerufen werden können, um mehrere Trigger zu aktivieren bzw. zu deaktivieren. Außerdem wird eine Funktion erstellt, die verwendet werden kann, um zu überprüfen, ob Trigger-Vorgänge aktiviert sind.
Erstellen Sie eine Prozedur, die aufgerufen werden kann, um Trigger-Vorgänge zu deaktivieren. Ihr Verhalten basiert auf dem Wert einer Verbindungsvariablen.
CREATE PROCEDURE sp_disable_triggers() BEGIN IF VAREXISTS ('enable_trigger_logic') = 0 THEN CREATE VARIABLE enable_trigger_logic INT; END IF; SET enable_trigger_logic = 0; END; |
Erstellen Sie eine Prozedur, die aufgerufen werden kann, um Trigger-Vorgänge zu aktivieren. Ihr Verhalten basiert auf dem Wert einer Verbindungsvariablen.
CREATE PROCEDURE sp_enable_triggers() BEGIN IF VAREXISTS ('enable_trigger_logic') = 0 THEN CREATE VARIABLE enable_trigger_logic INT; END IF; SET enable_trigger_logic = 1; END; |
Erstellen Sie eine Funktion, die aufgerufen werden kann, um zu ermitteln, ob Ihre Trigger-Vorgänge aktiviert sind:
CREATE FUNCTION f_are_triggers_enabled() RETURNS INT BEGIN IF VAREXISTS ('enable_trigger_logic') = 1 THEN RETURN enable_trigger_logic; ELSE RETURN 1; END IF; END; |
Fügen Sie eine IF-Klausel zu den Triggern hinzu, bei denen Sie steuern möchten, wann die Vorgänge ausgeführt werden:
IF f_are_triggers_enabled() = 1 THEN ... your-trigger-logic END IF; |
Rufen Sie die in Schritt 2 erstellte Prozedur auf, um Trigger-Vorgänge zu aktivieren:
CALL sp_enable_triggers(); ... execute-code-where-trigger-logic-runs |
Rufen Sie die in Schritt 1 erstellte Prozedur auf, um Trigger-Vorgänge zu deaktivieren:
CALL sp_disable_triggers(); ... execute-your-code-where-trigger-logic-is-disabled |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |