使用函数在预言机中存储游标



嗨,所以我创建了一个包含许多游标的存储过程,所使用的游标将取决于传入的变量。 我的想法是通过将所有游标放在一个函数中,然后返回所需的游标来清理我的存储过程。 这样,如果我需要创建更多的游标,我可以修改函数。

这是我的函数:

create or replace function E_P_CURSOR (p_schoolid number, p_mode number, p_d varchar2) 
return sys_refcursor
is
rf_cur   sys_refcursor;
begin
IF (p_schoolid = 2243 and p_mode = 1) then
open rf_cur for
SELECT ..........;
return rf_cur;
end if;
end E_P_CURSOR;

但是当我尝试编译我的主程序时,它会给出一个错误。


Procedure P_DF(p_schoolid IN number, p_mode In Number)  As
v_cursor      sys_refcursor;
....
....
BEGIN
v_cursor:= E_P_CURSOR (p_schoolid, p_mode, v_d);
FOR cur_rec IN v_cursor LOOP 
UTL_FILE.PUT_LINE(v_file,cur_rec.col1||cur_rec.col2||cur_rec.col3||cur_rec.col4||cur_rec.col5||cur_rec.col6||cur_rec.col7||cur_rec.col8);
END LOOP;  
END; 
..       

错误: [错误]PLS-00221(671:26(:PLS-00221:"V_CURSOR"不是过程或未定义

....

你缺少一个开始

Procedure P_DF(p_schoolid IN number, p_mode In Number)  As
v_cursor      sys_refcursor;
....
BEGIN  -- ADD THIS
v_cursor:= E_P_CURSOR (p_schoolid, p_mode, v_d);
FOR cur_rec IN v_cursor LOOP 
UTL_FILE.PUT_LINE(v_file,cur_rec.col1||cur_rec.col2||cur_rec.col3||cur_rec.col4||cur_rec.col5||cur_rec.col6||cur_rec.col7||cur_rec.col8);
END LOOP;   
..       

最新更新