Oracle Déclencher ORA-04098: déclencheur n'est pas valide et l'échec de la re-validation
Je suis en train de créer un simple déclencheur dans une base de données oracle 10g. Ce script pour Créer le déclencheur s'exécute propre.
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;
/
Mais quand je le lance:
INSERT INTO Alerts(observationID, dateSent, message, dateViewed) VALUES (3, CURRENT_TIMESTAMP, 'Alert: You have exceeded the Max Threshold', NULL);
pour activer le déclencheur, j'obtiens ce message d'erreur:
ORA-04098: déclenchement de JMD.NEWALERT' est pas valide et l'échec de la re-validation
(0 lignes concernées)
Je ne comprends pas quel est la cause de cette erreur. Savez-vous quelles sont les causes de cette erreur? Ou pourquoi ce qui se passe?
Vous en remercie d'avance!
-David
J'ai également exécuter
qu'est-ce que votre structure de table pour
INSERT INTO Users (userID, firstName, lastName, password) VALUES ('how', 'im', 'testing', 'this trigger')
et il fonctionne très bien.qu'est-ce que votre structure de table pour
Users
et Alerts
tables?OriginalL'auteur user3412162 | 2014-03-26
Vous devez vous connecter pour publier un commentaire.
Oracle va essayer de recompiler des objets non valides comme on les appelle. Ici, le déclencheur n'est pas valide, et à chaque fois que vous essayez d'insérer une ligne, il va essayer de recompiler le déclencheur, et l'échec, ce qui conduit à l'ORA-04098 erreur.
Vous pouvez
select * from user_errors where type = 'TRIGGER' and name = 'NEWALERT'
de voir ce message d'erreur(s) le déclencheur est et pourquoi il ne compile pas. Dans ce cas, il semble que vous êtes en manque un point-virgule à la fin de lainsert
ligne:Ainsi de faire:
Si vous obtenez une compilation d'avertissement lorsque vous faites cela, vous pouvez faire
show errors
si vous êtes dans SQL*Plus ou SQL Developer, ou de la requêteuser_errors
de nouveau.Bien sûr, cela suppose que votre
Users
tables n'ont de ces noms de colonne, et ils sont tousvarchar2
... mais sans doute que vous allez faire quelque chose de plus intéressant avec le déclencheur vraiment.Je ne savais pas à propos de la clause select pour le déclencher d'erreur, +1 pour ça, et aussi, vous pouvez exécuter
SHOW ERRORS TRIGGER trigger_name;
pour vérifier les erreurs sur le déclencheur de la définition de techonthenet.com/oracle/errors/ora04098.phpOriginalL'auteur Alex Poole
Cause: Un déclencheur a été tentée à être récupéré pour l'exécution et a été jugée invalide. Cela signifie également que la compilation/échec de l'autorisation pour la détente.
Action: les Options sont à régler la compilation ou de l'autorisation d'erreurs, de désactiver le déclencheur, ou de baisse de la gâchette.
Syntaxe
OriginalL'auteur Kiran.Bakwad
dans mon cas, cette erreur est déclenchée en raison de la séquence n'a pas été créé..
OriginalL'auteur Siva Anand