<snip>
for pr_name in pres loop
dbms_output.put_line(pr_name);
end loop;
<snip>
В PL / SQL курсор для цикла неявно объявляет переменную цикла как тип записи, соответствующий строке курсора. Итак, в цикле pr_name
есть запись с одним полем vice_pres_name
. Это поле имеет тип vice_pres_name%TYPE
. Этот внутренний pr_name
скрывает внешний аргумент pr_name
. DBMS_OUTPUT.PUT_LINE использует varchar2, а PL / SQL не может неявно преобразовать запись pr_name
.
Вот пример анонимного, который использует курсор для цикла и синтаксис записи для печати значений, возвращаемых курсором:
SQL> declare
2 cursor pres is select 'A' as vice_pres_name
3 from dual union all select 'B' from dual;
4 begin <<ex10_1>>
5 for pr_name in pres loop
6 dbms_output.put_line(pr_name.vice_pres_name);
7 end loop;
8 end ex10_1;
9 /
A
B
PL/SQL procedure successfully completed.
Также обратите внимание, что курсор для цикла неявно открывает и закрывает курсор для вас.