【发布时间】:2020-06-18 20:15:45
【问题描述】:
我想要一个函数从表 employees 中检索信息,然后将这些信息填充到记录中,将记录返回给调用者。在块中,使用 ID (114) 调用 F6,并打印通过函数调用接收到的信息。
DECLARE
TYPE empdetail IS RECORD (
dept_id NUMBER,
salary NUMBER,
first_name VARCHAR2(20),
last_name VARCHAR2(25));
FUNCTION hw2(emp_id IN NUMBER) RETURN empdetail
IS
rec1 empdetail;
avg_sal employees.salary%TYPE;
BEGIN
select department_id, salary, first_name, last_name INTO rec1
from employees
where employee_id = emp_id;
avg_sal := salary / 1;
return avg_Sal;
end hw2;
/
BEGIN
emp_no employees.employee_id%TYPE : = 114;
emp_details := f6(emp_no);
DBMS_OUTPUT.PUT_LINE(
'employee details are: ' ||
emp_details.emp_id || ', ' ||
emp_details.dept_id || ', '||
emp_details.salary || ', ' ||
emp_details.first_name || ', ' ||
emp_details.last_name);
END;
/
这给出了错误:
ORA-06550:第 22 行,第 0 列:
PLS-00103:在预期以下情况之一时遇到符号“文件结尾”:
开始函数编译指示程序
06550. 00000 - “第 %s 行,第 %s 列:\n%s”
*原因:通常是 PL/SQL 编译错误。
*行动:
【问题讨论】:
-
代码中的私有函数 - HW2() - 是更广泛程序的声明的一部分。您有一个程序在函数声明之后终止
/,这是错误的。它让编译器认为你的整个程序已经完成,而实际上它只是声明部分。 -
是的,所以我删除了 / 仍然得到同样的错误
-
在主程序的 BEGIN 之后还有一个变量声明
emp_no employees.employee_id%TYPE : = 114;。您需要在 DECLARE 部分中声明变量,并且在任何私有程序单元之前。 -
为了避免下一个语法错误,您将函数命名为
HW2(),但您的程序引用了名为F6()的东西。 F6() 是现有的独立功能吗?如果是这样,为什么还要定义 HW2()? -
是的,我很抱歉,但是因为我的函数本身给出了错误,所以我没有尝试运行调用函数部分,即下面的部分。