在过程中使用游标作为函数输出(Oracle)

时间:2011-11-29 12:00:55

标签: oracle cursor sys-refcursor

我正试图找到一个解决方案,但一直都是错的。那么我的问题是什么:

我有一个功能:

function fun1 (
p_param1 number) return sys_refcursor
is 
  c_result sys_refcursor;
begin
  open c_result for select e.username, c.contract_id from employees e 
    join contracts c on c.employee_id = e.employee_id;
  return c_result;
end fun1;

我想在我的存储过程中使用此函数:

procedure proc1 (...) 
is ...
cur_contract sys_refcursor;
begin
...
  open cur_contract for fun1(p_param1);
  loop
    fetch cur_contract into v_username, v_contract_id;
    exit when cur_contract%notfound;
    ...
  end loop;
  close cur_contract;
...
end proc1;

我得到错误:表达式错误的类型为“open cur_contract for fun1(p_param1);”

我应该更改什么才能使我的程序有效?

1 个答案:

答案 0 :(得分:2)

您已经在fun1中打开了光标。请尝试以下方法:

procedure proc1 (...)
  is
  ...
  cur_contract sys_refcursor;
begin
  ...
 cur_contract := fun1(p_param1);

 loop
   fetch cur_contract into v_username, v_contract_id;
   exit when cur_contract%notfound;
   ...
 end loop;

 close cur_contract;
 ...
end proc1; 

我希望这会有所帮助。