Oracle spróbuje ponownie skompilować niepoprawne obiekty, do których się odnoszą. Tutaj wyzwalacz jest nieprawidłowy i za każdym razem, gdy próbujesz wstawić wiersz, spróbuje on ponownie skompilować wyzwalacz i zakończy się niepowodzeniem, co prowadzi do błędu ORA-04098.
Możesz select * from user_errors where type = 'TRIGGER' and name = 'NEWALERT'
aby zobaczyć, jakie błędy faktycznie otrzymuje wyzwalacz i dlaczego się nie kompiluje. W tym przypadku wygląda na to, że brakuje średnika na końcu insert
linia:
INSERT INTO Users (userID, firstName, lastName, password)
VALUES ('how', 'im', 'testing', 'this trigger')
Więc zrób to:
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;
/
Jeśli otrzymasz ostrzeżenie kompilacji, gdy to zrobisz, możesz zrobić show errors
jeśli korzystasz z SQL*Plus lub SQL Developer, lub zapytaj user_errors
ponownie.
Oczywiście zakłada to, że Twoi Users
tabele mają te nazwy kolumn i wszystkie są varchar2
... ale prawdopodobnie naprawdę zrobisz coś ciekawszego z wyzwalaczem.