sql >> Databasteknik >  >> RDS >> Oracle

Oracle Trigger ORA-04098:triggern är ogiltig och misslyckad omvalidering

Oracle kommer att försöka kompilera om ogiltiga objekt som de hänvisas till. Här är triggern ogiltig, och varje gång du försöker infoga en rad kommer den att försöka kompilera om triggern och misslyckas, vilket leder till ORA-04098-felet.

Du kan select * from user_errors where type = 'TRIGGER' and name = 'NEWALERT' för att se vilka fel som utlösaren faktiskt får och varför den inte kompilerar. I det här fallet verkar det som att du saknar ett semikolon i slutet av insert rad:

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

Så gör det:

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

Om du får en kompileringsvarning när du gör det kan du show errors om du använder SQL*Plus eller SQL Developer, eller frågar user_errors igen.

Naturligtvis förutsätter detta dina Users Tabeller har dessa kolumnnamn, och de är alla varchar2 ... men förmodligen kommer du att göra något mer intressant med avtryckaren egentligen.



  1. Ställa in nätverkstidsgräns för JDBC-anslutning

  2. FORALL-uttalande med VALUES-OF Bound-klausul i Oracle Database

  3. Vad är ett databasschema?

  4. Hur får man de avgränsande koordinaterna för ett amerikanskt postnummer?