sql >> データベース >  >> RDS >> Oracle

OracleトリガーORA-04098:トリガーが無効であり、再検証に失敗しました

    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です。 ...しかし、おそらくあなたはトリガーを使ってもっと面白いことをするでしょう。



    1. Windowsでpostgresqlリスニングポートを変更する方法は?

    2. OpenVPNを使用してクラウド内のデータベースクラスターへのアクセスを保護する

    3. MySQLを使用するようにDjangoを設定する

    4. PHPアレイをMySQLに保存しますか?