【发布时间】:2019-08-31 01:30:35
【问题描述】:
当尝试编译以执行这两个函数时(@directory),我在第 48 行(或函数的第 13 行)不断收到无数据错误。这是我收到的错误。注意:SYSTEM 是我连接的服务器。
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at "SYSTEM.DEPTPROJECT", line 13
ORA-06512: at line 4
ORA-06512: at line 4
这些是我的功能
SET ECHO ON;
SET FEEDBACK ON;
SET LINESIZE 100;
SET PAGESIZE 100;
SET SERVEROUTPUT ON;
CREATE OR REPLACE FUNCTION DEPTPROJECT(departmentNumber IN NUMBER)
RETURN VARCHAR IS
dep# DEPARTMENT.D#%TYPE;
depName DEPARTMENT.DName%TYPE;
counter NUMBER(10,0);
empNumber CHAR(5);
empName VARCHAR2(30);
result VARCHAR2(600);
BEGIN
SELECT D#, DNAME INTO dep#, depName FROM DEPARTMENT WHERE DEPARTMENT.D# = dep#;
result := result || 'Department'|| dep# || '' || depName || chr (10);
FOR i IN(SELECT P# , PTitle , Budget FROM PROJECT WHERE PROJECT.D# = dep# ORDER BY BUDGET DESC)
LOOP
result:= result || chr(9)|| 'Project: ' || i.P# || '' || i.PTitle || i.Budget || chr(10);
FOR j IN(SELECT EMPLOYEE.Name, EMPLOYEE.E# FROM WORKSON INNER JOIN EMPLOYEE ON EMPLOYEE.E# = WORKSON.E# WHERE WORKSON.P# = i.P# ORDER BY EMPLOYEE.NAME ASC )
LOOP
result:= result || chr(10) || j.E# || '' || j.Name || chr(10);
END LOOP;
END LOOP;
RETURN result;
END;
/
BEGIN
FOR x IN(SELECT D# FROM DEPARTMENT)
LOOP
DBMS_OUTPUT.PUT_LINE(DEPTPROJECT(x.D#));
END LOOP;
END;
/
【问题讨论】:
-
那些不是编译错误,它们是运行时错误。编译错误将以
PLS-开头。SYSTEM也不是服务器,它是一个帐户(您不应该将其用于开发)。此外,CHAR和VARCHAR是非标准的 - 您应该使用VARCHAR2。 -
Oracle 在我们执行返回 no data 的 SELECT 语句时抛出 NO_DATA_FOUND 异常。也就是说,表中没有符合 WHERE 子句条件的行。您的代码有一个查询可能会抛出 NO_DATA_FOUND:来自 DEPARTMENT 的 SELECT。所以最可能的解释是您的 WHERE 子句使用变量
dep#- 这将是空值 - 而不是使用参数departmentNumber。