Oracle:在函数中返回多行

时间:2014-03-17 16:56:38

标签: oracle oracle11g stored-functions

我正在尝试创建一个返回多行的函数。

以下是我的功能和类型

create or replace type emp_type
(
first_name varchar2(20)
, last_name varchar2(20)
, depart_name varchar2(20)
)
/
create or replace function get_employee
 (loc in number)
return emp_type
as  
   emp_record emp_type;
begin
    select a.first_name, a.last_name, b.department_name into emp_record.first_name,
emp_record.last_name,emp_record.depart_name 
   from employees a, departments b 
    where a.department_id=b.department_id and location_id=loc;

   return(emp_record);  
end;

我用过

select get_employee(5) from dual;

我得到&#34; exact fetch returns more than requested number of rows&#34;错误。 之后,当我在选择查询中使用rownum<2时,我得到了&#34; Reference to uninitialized composite&#34;。

你能帮忙吗?

先谢谢

1 个答案:

答案 0 :(得分:4)

如果要返回sys_refcursor,则没有理由声明对象类型或尝试返回对象类型。只需返回sys_refcursor

create or replace function get_employee
  (p_loc in number)
  return sys_refcursor
as  
  l_rc sys_refcursor;
begin
  open l_rc
   for select a.first_name, a.last_name, b.department_name 
         from employees a, 
              departments b 
        where a.department_id=b.department_id 
          and location_id=p_loc;

  return l_rc; 
end;