PLS-00103功能结束时出错

时间:2011-04-26 11:59:43

标签: plsql oracle10g oracle-xe pls-00103

收到与功能相关的以下错误:

  

'第20行的错误:PLS-00103:遇到以下其中一项时遇到符号“end-of-file”:end not pragma final instantiable order overriding static member constructor map 0.01 seconds

CREATE OR REPLACE FUNCTION Function1
RETURN FLOAT
IS 
    PricePerBug FLOAT,
    NumberOfBugs NUMBER,
    TotalIncome FLOAT;
BEGIN
    SELECT SUM(ProjectValue) INTO TotalIncome FROM tblProject;
    SELECT COUNT(idBug) INTO NumberOfBugs FROM tblBug;
    PricePerBug := (NumberOfBugs)/(TotalIncome);
    RETURN PricePerBug;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('No data found, no result to display; exception handled...');
    WHEN TOO_MANY_ROWS THEN
    RETURN 'Too many rows returned...';
    WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20015, 'Unknown exception in function Function1.');
END Function1;
/

任何赞赏的建议......

1 个答案:

答案 0 :(得分:7)

声明应该以分号而不是逗号结尾:

PricePerBug FLOAT;
NumberOfBugs NUMBER;
TotalIncome FLOAT;

与此错误无关的其他问题涉及异常处理:

  1. 如果有人提出NO_DATA_FOUND (它不会)你会得到的 错误“ORA-06503:PL / SQL:功能 没有价值地返回“因为你 处理异常但不处理 返回一个值。

  2. 如果TOO_MANY_ROWS被引发(它不会),你会收到一个错误,因为你不能从只返回FLOAT类型值的函数返回文件'返回太多行......' !

  3. 如果有任何其他异常被提出(可能是),您将无法知道它是什么,因为您将有用的Oracle异常替换为您自己的无用的“未知异常”消息。
  4. 此特定函数的正确错误处理量为none,即:

    CREATE OR REPLACE FUNCTION Function1
    RETURN FLOAT
    IS 
        PricePerBug FLOAT;
        NumberOfBugs NUMBER;
        TotalIncome FLOAT;
    BEGIN
        SELECT SUM(ProjectValue) INTO TotalIncome FROM tblProject;
        SELECT COUNT(idBug) INTO NumberOfBugs FROM tblBug;
        PricePerBug := (NumberOfBugs)/(TotalIncome);
        RETURN PricePerBug;
    END Function1;