2017-01-24 20 views
-2

パッケージの 'body'セクションでpl/sqlの関数をコンパイルしようとしています。PL/SQL関数の戻り値取得エラーORA-00905キーワードがありません

FUNCTION chkMissingData RETURN NUMBER 
IS 
      BEGIN 
       UPDATE ERRORS 
       SET ERRORDESC = 
       CASE 
       WHEN ERRVAL IS NULL THEN 'No data' 
       ELSE 'OK' 
       RETURN 0;  -- ORA-00905 missing keyword 

      EXCEPTION 
       WHEN DUP_VAL_ON_INDEX THEN 
       dbms_output.put_line('INSERT: Constraint violated ' || ERR_NUM || ', Msg:' || ERR_MSG); 
       RETURN ERR_NUM; 

       WHEN OTHERS THEN 
       dbms_output.put_line('Error ' || ERR_NUM || ', Msg:' || ERR_MSG); 
       RETURN ERR_NUM; 

    END chkMissingData; 

私は同様の問題に他の答えをチェックしましたが、私は、私は「何を見ていない:意図は成功したテーブルの列を更新するか、エラーに関連した数を返す時にどちらかの数値を返すことです構文的に見当たらない。

答えて

0

[OK]を配置するのを忘れました。 CASE文の後に!

1

SQL Developerなどの自動フォーマッタを含むIDEを使用する必要があります。次に、StackOverflowにサンプルをロードする前に、そのような一般的な構文の問題をフォーマットして識別できます。

livesql.oracle.comを使用してコードをテストし、少なくともコンパイルしてからここに転記することもできます。

SQL DeveloperとLiveSQLは完全に無料です。前述したように、修正スニペットは以下の通りです

+0

私はあなたがSQLCODEとSQLERRM

を意味すると思います(そして、私はERRVALは、あなたのテーブルのエラーの列であることを推測しています) ;彼は**何が欠けていたのか分からなかった。 SQL Developerはあなたにそれを伝えません*! {:-) – mathguy

+0

PL/SQL Developerでは、フォーマッタは 'update errors'のすべてを' else 'OK' return 0; 'に1行で置きます。少なくとも、セミコロンがないことについての手がかりを与えます。プラスOPのフォーマットは間違っています:( –

0

..

CREATE OR REPLACE 
    FUNCTION chkMissingData 
    RETURN NUMBER 
    IS 
    BEGIN 
    UPDATE ERRORS 
    SET ERRORDESC = 
     CASE 
     WHEN ERRVAL IS NULL 
     THEN 'No data' 
     ELSE 'OK' 
     END; 
    RETURN 0; -- ORA-00905 missing keyword 
    EXCEPTION 
    WHEN DUP_VAL_ON_INDEX THEN 
    dbms_output.put_line('INSERT: Constraint violated ' || ERR_NUM || ', Msg:' || ERR_MSG); 
    RETURN ERR_NUM; 
    WHEN OTHERS THEN 
    dbms_output.put_line('Error ' || ERR_NUM || ', Msg:' || ERR_MSG); 
    RETURN ERR_NUM; 
    END chkMissingData; 
0

err_numとERR_MSGは、変数を宣言していません。 すべてのことは良いですが、この場合には、OPが何かが欠けていた場所を正確に知っていたようだ

関連する問題