Нужна ли клауза RETURN при объявлении явного курсора?
Есть такой код:
CURSOR emp_cur RETURN employees%ROWTYPE
IS
SELECT * FROM employees
WHERE department_id = 10;
Объясните, пожалуйста, зачем здесь нужен клауза RETURN?
Нужно ли затем передавать курсор в переменную, например: ins_c emp_cur%ROWTYPE;?
Ответы (1 шт):
Нужно ли затем передавать курсор в переменную ins_c emp_cur%ROWTYPE;
Нет, не обязательно, можно и в переменную другого типа, но колличество полей и их тип (как минимум совместимый тип) должны совпадать с сетом результата курсора.
create table employees (id int primary key, name varchar2 (32), department_id int)
/
declare
CURSOR emp_cur RETURN employees%ROWTYPE IS
SELECT * FROM employees
WHERE department_id = 10;
type emprec is record (id int, name varchar2 (32), department_id varchar2 (8));
emp emprec;
begin
open emp_cur;
fetch emp_cur into emp;
end;
/
PL/SQL procedure successfully completed.
Клауза RETURN нужна только при декларации курсора. При определении курсора эта клауза не обязательна, т.е, опциональна.
Явный курсор всегда "строгий", то есть, тип результата курсора должен быть известен на этапе компиляции, или из клаузы RETURN при декларации, или из статического запроса при определении курсора. Поэтому, при определени курсора клауза RETURN или может быть опущена, или она должна совпадать с декларацией:
declare
type emprec is record (id int, name varchar2 (32), department_id int);
CURSOR emp_cur RETURN emprec; --декларация
CURSOR emp_cur RETURN employees%ROWTYPE IS --определение
SELECT * FROM employees
WHERE department_id = 10;
emp emprec;
begin null;
open emp_cur;
end;
/
PLS-00307: too many declarations of 'EMP_CUR' match this call