2017-10-13 3 views
1

トリガーを作成しようとしていますが、バインドを毎回要求しています。表示されるウィンドウで[適用]をクリックすると、それが欲しいと思うように動作します...しかし、それはエラーを記録します...バインドを求めるOracle PL/SQLトリガー

私のトリガーは、クライアントがアクティブかどうかを確認し、変更有効であることが判明した場合...

CREATE Trigger Client_Activity 
BEFORE Insert or Update or Delete ON Client 
FOR EACH ROW 
DECLARE 
    VAR_AC char(2); 
BEGIN 
    IF UPDATING THEN 
     SELECT Activity INTO VAR_AC 
     FROM Client_Additionals 
     WHERE Activity = :Old.Activity; 

     IF Activity = 'AC' 
      THEN Raise_Application_Error(-20999, 'active') 
     END IF; 
END; 
/

ORACLE VERSION 12はあなたのトリガーに2個の構文エラーを持っているのsqldeveloper

+0

入れ 'SET DEFONE OFF;' 'CREATE TRIGGERを....'ステートメント、およびF5キーを押して、 'ランscript'前 – krokodilko

+0

@a_horse_with_no_name - コードにバインド変数がある場合と同じです。異なるフロントエンドはそれを別々に行います。 SQL \ * Plusは* Bind変数 "OLD"が宣言されていないと言っています*。 SQL Developerは、 "Enter binds"というポップアップ・ウィンドウを開き、「Old」の値を待機します。私はToadがSQL Developerに似た何かをすると信じています。 – mathguy

+0

@krokodilko - 私はそれが問題を治すとは思わない...それはなぜだろうか?この問題は、置換変数ではなく(誤った、または間違った情報の)バインド変数です。 – mathguy

答えて

0

を使用:

  1. IFはが不足しています
  2. はあなたが問題なくトリガーを作成することができ、あなたが一緒にそれを置くRaise_Application_Error()

;含まれていない変数var_ac

  • の内容を比較する必要があります。

    ただし、そのようなPL/SQLブロックを実行するには、SQL Developerの「スクリプトの実行」ボタンを使用する必要があります。

    enter image description here

    SQL * Plusは特別な処理は必要ありません:

    enter image description here

  • 関連する問題