2011-11-29 60 views
1

我试图找到解决方案,但始终出现问题。那么,什么是我的问题:在过程(Oracle)中使用游标作为函数输出

我有一个函数:

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; 

我得到错误:表达式是错误的类型在行“开放cur_contract为fun1(p_param1);”

我该如何改变以使我的程序正常工作?

回答

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; 

我希望这有助于。

相关问题