Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Gespeicherte Prozeduren, Trigger, Batches und benutzerdefinierte Funktionen » Trigger

 

Vorübergehendes Deaktivieren von Trigger-Vorgängen

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.

 Vorübergehendes Deaktivieren der Vorgänge eines einzelnen Triggers
Hinweis

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.

  1. 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;
  2. 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  
 Vorübergehendes Deaktivieren der Vorgänge für mehrere Trigger

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.

  1. 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;
  2. 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;
  3. 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;
  4. 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;
  5. 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
 Siehe auch