Использование курсоров в качестве функции вывода в процедуре (Oracle) - PullRequest
1 голос
/ 29 ноября 2011

Я пытаюсь найти решение, но все время что-то не так. Так в чем же моя проблема:

У меня есть функция:

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 для fun1 (p_param1);"

Что я должен изменить, чтобы мои процедуры работали?

1 Ответ

2 голосов
/ 29 ноября 2011

Вы уже открыли курсор в 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; 

Надеюсь, это поможет.

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