Oracleは、参照されている無効なオブジェクトを再コンパイルしようとします。ここではトリガーが無効であり、行を挿入しようとするたびにトリガーを再コンパイルしようとして失敗し、ORA-04098エラーが発生します。
select * from user_errors where type = 'TRIGGER' and name = 'NEWALERT'
トリガーが実際に取得するエラーと、それがコンパイルされない理由を確認します。この場合、insert
の最後にセミコロンがないようです。 行:
INSERT INTO Users (userID, firstName, lastName, password)
VALUES ('how', 'im', 'testing', 'this trigger')
だからそれを作る:
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;
/
コンパイルの警告が表示された場合は、show errors
を実行できます。 SQL *PlusまたはSQLDeveloperを使用している場合、またはuser_errors
をクエリする場合 もう一度。
もちろん、これはあなたのUsers
を想定しています テーブルにはこれらの列名があり、それらはすべてvarchar2
です。 ...しかし、おそらくあなたはトリガーを使ってもっと面白いことをするでしょう。