2017-05-27 15 views
0

これは、あらかじめ定義された値だけを設定できることを確認してください。私は、6行目でエラーにSQLトリガーステートメントが無視されました

エラーを取得:PL/SQL:ステートメントはEACH ROW
5. DECLARE
6. v_stru VARCHAR2(50)FOR
4.無視します。

CREATE OR REPLACE TRIGGER radnici_strucna_sprema 
BEFORE INSERT OR UPDATE OF STRUCNA_SPREMA ON radnici 
FOR EACH ROW 
DECLARE 
    v_stru VARCHAR2(50); 
BEGIN 
    v_stru := :NEW.strucna_sprema; 
    IF v_ss = 'osnovno' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSIF v_ss = 'srednje' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSIF v_ss = 'vise' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSIF grade = 'visoko' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSE 
    RAISE_APPLICATION_ERROR(NUM => -20002, 
      MSG => 'Forma strucne spreme nije odgovarajuca!'); 
    END IF; 
END; 
+3

? PL/SQLを適切に処理していないクライアントの問題(https://stackoverflow.com/a/37684613/266304)のように見えますが、おそらく別のクライアント...直接関係はありませんが、どこで'v_ss'と' grade'が出てくるはずですか? –

答えて

0

このようにしてみてください:

CREATE OR REPLACE TRIGGER radnici_strucna_sprema 
BEFORE INSERT OR UPDATE ON radnici 
FOR EACH ROW 
DECLARE 
    v_stru VARCHAR2(50); 
BEGIN 
    v_stru := :NEW.strucna_sprema; 
    IF v_ss = 'osnovno' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSIF v_ss = 'srednje' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSIF v_ss = 'vise' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSIF grade = 'visoko' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSE 
    RAISE_APPLICATION_ERROR(NUM => -20002, 
      MSG => 'Forma strucne spreme nije odgovarajuca!'); 
    END IF; 
END; 

問題がSTRUCNA_SPREMA OF

です。

この変数、STRUCNA_SPREMAは、radnici、または何を表している、あなたのテーブルの列のですか? しかし、正直言って、私はあなたの論理を理解していません。変数の列の値を代入し、その変数の値を列に代入します。なぜ ?!さらに、STRUCNA_SPREMAがvarcharであることを確認してください。

敬具、 ステファン

あなたがそのエラーを見ているクライアント
+0

'OF STRUCNA_SPREMA'は、その列が更新された場合にのみトリガーが起動することを意味します。したがって、[有効です](https://docs.oracle.com/database/121/LNPLS/create_trigger.htm#BABGDFBI)(論理はあまり意味がない)。これは、OPがゲットしているエラーを説明したり、回避したりしません。 –

+0

ロジックは次のとおりです。strucna_spremaの値が事前に定義されています。これは、事前定義された値の1つをチェックする必要があります。 –

関連する問題