Oracle sẽ cố gắng biên dịch lại các đối tượng không hợp lệ khi chúng được tham chiếu. Ở đây trình kích hoạt không hợp lệ và mỗi khi bạn cố gắng chèn một hàng, nó sẽ cố gắng biên dịch lại trình kích hoạt và không thành công, dẫn đến lỗi ORA-04098.
Bạn có thể select * from user_errors where type = 'TRIGGER' and name = 'NEWALERT'
để xem (các) lỗi nào mà trình kích hoạt thực sự mắc phải và tại sao nó không biên dịch. Trong trường hợp này, có vẻ như bạn đang thiếu dấu chấm phẩy ở cuối insert
dòng:
INSERT INTO Users (userID, firstName, lastName, password)
VALUES ('how', 'im', 'testing', 'this trigger')
Vì vậy, hãy làm cho nó:
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;
/
Nếu bạn nhận được cảnh báo biên dịch khi làm điều đó, bạn có thể show errors
nếu bạn đang sử dụng SQL * Plus hoặc SQL Developer hoặc truy vấn user_errors
một lần nữa.
Tất nhiên, điều này giả định Users
của bạn bảng có các tên cột đó và tất cả chúng đều là varchar2
... nhưng có lẽ bạn sẽ thực sự làm điều gì đó thú vị hơn với trình kích hoạt.