Oracle akan mencoba mengkompilasi ulang objek yang tidak valid seperti yang dirujuk. Di sini pemicu tidak valid, dan setiap kali Anda mencoba memasukkan baris, pemicu akan mencoba mengkompilasi ulang pemicu, dan gagal, yang mengarah ke kesalahan ORA-04098.
Anda dapat select * from user_errors where type = 'TRIGGER' and name = 'NEWALERT'
untuk melihat kesalahan apa yang sebenarnya didapat oleh pemicu dan mengapa pemicu tidak dapat dikompilasi. Dalam hal ini tampaknya Anda kehilangan titik koma di akhir insert
baris:
INSERT INTO Users (userID, firstName, lastName, password)
VALUES ('how', 'im', 'testing', 'this trigger')
Jadi buatlah:
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;
/
Jika Anda mendapatkan peringatan kompilasi saat melakukannya, Anda dapat melakukan show errors
jika Anda menggunakan SQL*Plus atau Pengembang SQL, atau kueri user_errors
lagi.
Tentu saja, ini mengasumsikan Users
. Anda tabel memang memiliki nama kolom itu, dan semuanya varchar2
... tapi mungkin Anda akan melakukan sesuatu yang lebih menarik dengan pemicunya.