Kürzlich stieß ich auf einen BEFORE INSERT OR UPDATE
Trigger auf einer Tabelle. In diesem Trigger verlässt sich der Autor auf die Funktionen INSERTING
und UPDATING
(beide geben BOOLEAN
zurück) des DBMS_STANDARD
-Pakets, um festzustellen, ob der Trigger vor einer Einfügung oder vor einer Aktualisierung ausgelöst wurde.Sollen Prozeduren und/oder Funktionen des DBMS_STANDARD-Pakets im PL/SQL-Code verwendet werden?
Zum Beispiel:
CREATE OR REPLACE TRIGGER CUSTOMER_TRIGGER
BEFORE INSERT OR UPDATE ON CUSTOMER
FOR EACH ROW
BEGIN
IF INSERTING THEN
/* Some code */
END IF;
IF UPDATING THEN
/* Some other code */
END IF;
END;
Ja, ich weiß, dass zwei einzelne Trigger geschrieben wurden, könnten die beiden Ereignisse separat zu behandeln. Das ist nicht der Sinn dieser Frage.
Nach der Behandlung eines Fehlers, der von diesen Funktionen empfangen wurde, erhielten wir die Nachricht (von Oracle Support), dass "dbms_standard-Routinen eigentlich nicht dazu bestimmt sind, von Benutzerprogrammen aufgerufen zu werden". Ist das wahr?
Ich finde dies ein wenig seltsam, unter Berücksichtigung anderer Verfahren (wie RAISE_APPLICATION_ERROR
und COMMIT
) werden häufig in PL/SQL-Code verwendet.
Haben Sie eine Metalink-Notiz oder etwas anderes, das die Öffentlichkeit (oder zumindest die Oracle-lizenzierte Öffentlichkeit) sehen kann? Und wenn die INSERTING/UPDATING-Aufrufe von STANDARD in Triggern nicht verwendet werden, wann genau werden sie verwendet? –
@Adam: Nein, diese Empfehlung kam nicht von einer Metalink-Notiz. Vielmehr kam es direkt von Oracle Support auf einer Serviceanfrage. –