Oracle
 sql >> Base de données >  >> RDS >> Oracle

Déclencheur Oracle ORA-04098 :le déclencheur n'est pas valide et la revalidation a échoué

Oracle essaiera de recompiler les objets invalides tels qu'ils sont référencés. Ici, le déclencheur n'est pas valide et chaque fois que vous essayez d'insérer une ligne, il essaie de recompiler le déclencheur et échoue, ce qui entraîne l'erreur ORA-04098.

Vous pouvez select * from user_errors where type = 'TRIGGER' and name = 'NEWALERT' pour voir quelle(s) erreur(s) le déclencheur obtient réellement et pourquoi il ne se compile pas. Dans ce cas, il semble qu'il vous manque un point-virgule à la fin de insert ligne :

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

Alors faites-le :

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;           
/

Si vous obtenez un avertissement de compilation lorsque vous faites cela, vous pouvez faire show errors si vous êtes dans SQL*Plus ou SQL Developer, ou interrogez user_errors à nouveau.

Bien sûr, cela suppose vos Users les tables ont ces noms de colonnes, et elles sont toutes varchar2 ... mais vous ferez probablement quelque chose de plus intéressant avec le déclencheur.