PL / SQL函数返回 - gettting错误ORA-00905缺少关键字

时间:2017-01-24 21:24:01

标签: oracle plsql

我正在尝试在包的'body'部分中编译pl / sql中的函数。目的是在成功更新表列或返回与错误相关联的数字时返回数值:

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;

我已经检查了类似问题的其他答案,但我没有看到我在语法上缺少什么。

4 个答案:

答案 0 :(得分:1)

您应该使用包含自动格式化程序的IDE,例如SQL Developer。然后,在将示例加载到StackOverflow之前,您可以格式化并识别类似的常见语法问题。

您还可以使用livesql.oracle.com测试您的代码,确保至少编译,然后发布到此处。

SQL Developer和LiveSQL完全免费。

答案 1 :(得分:0)

好的,我忘了放一个'结束;'在CASE声明之后!

答案 2 :(得分: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;

答案 3 :(得分:0)

err_num和err_msg不是声明的变量。 我认为你的意思是SQLCODE和SQLERRM

(我猜测ERRVAL是你的表ERRORS的一列)