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

SAP Sybase SQL Anywhere 16.0 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Gespeicherte Prozeduren, Trigger, Batches und benutzerdefinierte Funktionen » Trigger » Erweiterte Informationen zu Triggern

 

INSTEAD OF-Trigger

INSTEAD OF-Trigger unterscheiden sich von BEFORE- und AFTER-Triggern, da beim Auslösen eines INSTEAD OF-Triggers die auslösende Aktion übersprungen wird und stattdessen die festgelegte Aktion durchgeführt wird.

Die folgende Liste zeigt die Fähigkeiten und Einschränkungen, die speziell für INSTEAD OF-Trigger gelten:

  • Für jedes Trigger-Ereignis in einer bestimmten Tabelle kann es nur einen einzigen INSTEAD OF-Trigger geben.

  • INSTEAD OF-Trigger können für eine Tabelle oder eine Ansicht definiert werden. INSTEAD OF-Trigger können jedoch nicht für materialisierte Ansichten definiert werden, da Sie für diese keine DML-Vorgänge ausführen können wie etwa die Anweisungen INSERT, DELETE und UPDATE.

  • Wenn Sie einen INSTEAD OF-Trigger definieren, können Sie keine ORDER- oder WHEN-Klauseln angeben.

  • Für das Trigger-Ereignis UPDATE OF column-list können Sie keinen INSTEAD OF-Trigger festlegen.

  • Ob ein INSTEAD OF-Trigger Rekursionen ausführt, hängt davon ab, ob das Ziel des Triggers eine Basistabelle oder eine Ansicht ist. Die Rekursion ist für Ansichten möglich, nicht aber für Basistabellen. D.h., wenn ein INSTEAD OF-Trigger DML-Vorgänge in der Basistabelle durchführt, für die der Trigger definiert ist, werden durch diese Vorgänge keine Trigger ausgelöst (auch keine BEFORE- oder AFTER-Trigger). Falls es sich beim Ziel um eine Ansicht handelt, werden alle Trigger für die Vorgänge ausgelöst, die für die Ansicht ausgeführt werden.

  • Wenn ein INSTEAD OF-Trigger für eine Tabelle definiert ist, können Sie in dieser Tabelle keine INSERT-Anweisung mit einer ON EXISTING-Klausel ausführen. Falls Sie dies doch versuchen, wird der Fehler SQLE_INSTEAD_TRIGGER gemeldet.

  • Sie können keine INSERT-Anweisung für eine Ansicht ausführen, die mit WITH CHECK OPTION festgelegt wurde (oder die in einer anderen, auf diese Art festgelegten Ansicht verschachtelt ist) und für die ein INSTEAD OF INSERT-Trigger festgelegt ist. Dies gilt auch für die Anweisungen UPDATE und DELETE. Falls Sie dies doch versuchen, wird der Fehler SQLE_CHECK_TRIGGER_CONFLICT gemeldet.

  • Falls ein INSTEAD OF-Trigger als Ergebnis einer positionsbasierten UPDATE-, DELETE- oder PUT-Anweisung oder einer breiten Einfügung ausgelöst wird, wird der Fehler SQLE_INSTEAD_TRIGGER_POSITIONED gemeldet.

 Nicht aktualisierbare Ansichten mit INSTEAD OF-Trigger aktualisieren
 Siehe auch