wake-up-neo.com

Oracle-Trigger ORA-04098: Der Trigger ist ungültig und die erneute Validierung ist fehlgeschlagen

Ich versuche, einen einfachen Auslöser in einer Oracle 10g-Datenbank zu erstellen. Dieses Skript zum Erstellen des Triggers wird fehlerfrei ausgeführt.

CREATE OR REPLACE TRIGGER newAlert
AFTER INSERT OR UPDATE ON Alerts
  BEGIN
        INSERT INTO Users (userID, firstName, lastName, password) VALUES ('how', 'im', 'testing', 'this trigger')
  END;           
/

Aber wenn ich renne:

INSERT INTO Alerts(observationID, dateSent, message, dateViewed) VALUES (3, CURRENT_TIMESTAMP, 'Alert: You have exceeded the Max Threshold', NULL);

um den Trigger zu aktivieren, erhalte ich folgende Fehlermeldung:

ORA-04098: Auslöser 'JMD.NEWALERT' ist ungültig und die erneute Überprüfung ist fehlgeschlagen (0 Zeilen betroffen)

Ich verstehe nicht, was diesen Fehler verursacht. Wissen Sie, was diesen Fehler verursacht? Oder warum passiert das?

Danke im Voraus!

-David

21
user3412162

Oracle versucht, ungültige Objekte neu zu kompilieren, wenn auf sie verwiesen wird. Hier ist der Trigger ungültig, und jedes Mal, wenn Sie versuchen, eine Zeile einzufügen, wird versucht, den Trigger neu zu kompilieren, und es tritt ein Fehler auf, der zum ORA-04098-Fehler führt.

Sie können select * from user_errors where type = 'TRIGGER' and name = 'NEWALERT' Sehen, welche Fehler der Trigger tatsächlich bekommt und warum er nicht kompiliert. In diesem Fall scheint ein Semikolon am Ende der Zeile insert zu fehlen:

INSERT INTO Users (userID, firstName, lastName, password)
VALUES ('how', 'im', 'testing', 'this trigger')

Also mach es:

CREATE OR REPLACE TRIGGER newAlert
AFTER INSERT OR UPDATE ON Alerts
  BEGIN
        INSERT INTO Users (userID, firstName, lastName, password)
        VALUES ('how', 'im', 'testing', 'this trigger');
  END;           
/

Wenn Sie eine Kompilierungswarnung erhalten, können Sie show errors Ausführen, wenn Sie sich in SQL * Plus oder SQL Developer befinden, oder user_errors Erneut abfragen.

Dies setzt natürlich voraus, dass Ihre Users -Tabellen diese Spaltennamen haben und sie alle varchar2 Sind. Aber vermutlich werden Sie mit dem Auslöser wirklich etwas Interessanteres tun.

36
Alex Poole

Ursache: Es wurde versucht, einen Auslöser zur Ausführung abzurufen, der als ungültig befunden wurde. Dies bedeutet auch, dass die Kompilierung/Autorisierung für den Trigger fehlgeschlagen ist.

Aktion: Sie können die Kompilierungs-/Autorisierungsfehler beheben, den Trigger deaktivieren oder den Trigger löschen.

Syntax

ALTER TRIGGER trigger Name DISABLE;

ALTER TRIGGER trigger_Name ENABLE;
3
Kiran.Bakwad

in meinem Fall wird dieser Fehler ausgelöst, da die Sequenz nicht erstellt wurde.

CREATE SEQUENCE  J.SOME_SEQ  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE ;
0
Siva Anand