plsql - PLS-00103 函数结束时出错

标签 plsql oracle10g oracle-xe pls-00103

收到与函数相关的以下错误:

'ERROR at line 20: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: 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;
/

任何建议表示赞赏...

最佳答案

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

PricePerBug FLOAT;
NumberOfBugs NUMBER;
TotalIncome FLOAT;

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

  1. 如果曾经出现过 NO_DATA_FOUND (它不会)你会得到 错误“ORA-06503: PL/SQL: 函数 没有值(value)返回”因为你 处理异常但不 返回一个值。

  2. 如果曾经出现过 TOO_MANY_ROWS(不会出现),您将收到错误消息,因为您无法从仅返回 FLOAT 类型值的函数中返回文本“返回的行太多...” !

  3. 如果(可能)出现任何其他异常,您将不知道它是什么,因为您将有用的 Oracle 异常替换为您自己无用的“未知异常”消息。

此特定函数的错误处理的正确数量是无,即:

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;

关于plsql - PLS-00103 函数结束时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5789961/

相关文章:

oracle - 在 Oracle 上使用 JOIN 优化 SELECT 中的计数

Oracle 11g XE - 突然出现 ORA-01034 : ORACLE not available and ORA-27101: shared memory realm does not exist

database - 使用 Oracle 数据库的 Play 框架 - ORA-00942 : table or view does not exist

oracle - 请求超出了oracle数据库允许的最大限制

sql - Oracle PL/SQL 上年和上月

c# - 如何在 Oracle PL/SQL 中传递逗号分隔的字符串并遍历它以执行查询?

oracle - Oracle中向不同用户的某些表授予截断权限

oracle - 获取 PL/SQL : numeric or value error: character to number conversion error

SQL 查询语法 : Using table alias in a count is invalid? 为什么?

database - 强制关系 m :n