Использование функции для хранения курсоров в Oracle - PullRequest
1 голос
/ 25 сентября 2019

Привет, поэтому я создал хранимую процедуру, которая содержит много курсоров, и используемый курсор будет зависеть от передаваемых переменных. У меня была идея очистить мою хранимую процедуру, поместив все курсоры в функцию, а затем вернув еекурсор нужен.Таким образом, если мне нужно больше создавать курсоры, я могу просто изменить функцию.

вот моя функция:

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» не является процедурой или не определена

....

1 Ответ

0 голосов
/ 25 сентября 2019

Вам не хватает НАЧАЛА

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;   

..       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...