【问题标题】:Retrieve a record from a function从函数中检索记录
【发布时间】: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()?
  • 是的,我很抱歉,但是因为我的函数本身给出了错误,所以我没有尝试运行调用函数部分,即下面的部分。

标签: sql oracle plsql


【解决方案1】:

我认为您的功能可以简单得多。
您可以使您的函数从表中获取数据,并将其存储到记录中。然后返回完整的记录。并打印出每一列的数据。
也许这会给你一个想法:

CREATE OR REPLACE FUNCTION hw2(emp_id IN NUMBER)
RETURN Employees%ROWTYPE
IS
        CURSOR cEmployee IS
               SELECT * FROM Employees WHERE Id = emp_id;

        rEmployee cEmployee%ROWTYPE;
BEGIN
        OPEN cEmployee;
        FETCH cEmployee INTO rEmployee;
        CLOSE cEmployee;

    RETURN rEmployee;
END;
/

DECLARE
    rEmployee Employees%ROWTYPE;
BEGIN
    rEmployee := hw2(emp_id => 1);

    -- Print data
    DBMS_OUTPUT.PUT_LINE('Name:' || rEmployee.Name);
END;
/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    相关资源
    最近更新 更多