Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle Trigger ORA-04098:o gatilho é inválido e falhou na revalidação


O Oracle tentará recompilar objetos inválidos conforme eles são referidos. Aqui o gatilho é inválido, e toda vez que você tentar inserir uma linha ele tentará recompilar o gatilho, e falhará, o que leva ao erro ORA-04098.

Você pode select * from user_errors where type = 'TRIGGER' and name = 'NEWALERT' para ver qual(is) erro(s) o gatilho realmente recebe e por que ele não compila. Neste caso, parece que está faltando um ponto e vírgula no final do insert linha:
INSERT INTO Users (userID, firstName, lastName, password)
VALUES ('how', 'im', 'testing', 'this trigger')

Então faça:
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;           
/

Se você receber um aviso de compilação quando fizer isso, poderá show errors se você estiver no SQL*Plus ou SQL Developer, ou consulte user_errors novamente.

Claro, isso pressupõe que seus Users tabelas tem esses nomes de coluna, e eles são todos varchar2 ... mas presumivelmente você estará fazendo algo mais interessante com o gatilho realmente.