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

PLS-00049 BAD BIND VARIABLE

    'A'で変数をバインドすることを指している :OLD.AWitnessIDのように、開始時にアンダースコアはありません 、ただし、テーブルの列はWITNESS_IDです。 。したがって、それらは一致せず、このエラーを生成します。 WITNESS_TYPEさえありません 列。

    次に、insertに 監査テーブルの列名も間違っているステートメント。また、変数をUpdateに設定します ただし、UPDATEを確認してください -文字列値の比較では大文字と小文字が区別されることを忘れないでください。

    これはスキーマでコンパイルされます:

    CREATE OR REPLACE TRIGGER TRG_PLAUDWIT
    AFTER INSERT OR DELETE OR UPDATE ON PL_WITNESS
    FOR EACH ROW
    DECLARE
      v_trigger_task varchar2(10);
    BEGIN
      IF UPDATING THEN
        v_trigger_task := 'UPDATE';
      ELSIF DELETING THEN
        v_trigger_task := 'DELETE';
      ELSIF INSERTING THEN
        v_trigger_task := 'INSERT';
      ELSE
        v_trigger_task := NULL;
      END IF;
    
      IF v_trigger_task IN ('DELETE','UPDATE') THEN
        INSERT INTO PLAUDWIT (AUD_AWitnessID, AUD_AWitnessType, AUDIT_USER,
          AUDIT_DATE, AUDIT_ACTION)
        VALUES (:OLD.Witness_ID, :OLD.FK1_WITNESS_TYPE_ID, UPPER(v('APP USER')),
          SYSDATE, v_trigger_task);
      ELSE    
        INSERT INTO PLAUDWIT (AUD_AWitnessID, AUD_AWitnessType, AUDIT_USER,
          AUDIT_DATE, AUDIT_ACTION)
        VALUES (:NEW.Witness_ID, :NEW.FK1_WITNESS_TYPE_ID, UPPER(v('APP USER')),
          SYSDATE, v_trigger_task);
      END IF;
    END TRG_PLAUDWIT;
    /
    

    SQLフィドルがコンパイルエラーを表示しない




    1. ojdbcjarをプロジェクトに追加して使用する方法

    2. Mysqlで間隔の日付をインクリメントする方法

    3. 1つのクエリで複数の日付範囲を合計しますか?

    4. 表のシーケンス番号