Я хотел бы создать запись из refcursor. Мой код:
set serveroutput on
DECLARE
c_curs SYS_REFCURSOR;
v_id NUMBER;
BEGIN
pck_prov.get_value_type_list (1, c_curs); --> procedure called here
-- I guess this is the place where record can be created from cursor.
LOOP
FETCH c_curs
INTO v_id;--instead of fetching into variable I would like to fetch into row
EXIT WHEN c_curs%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_id);--if fetching is done into row, only selected columns can be printed, like myrow.id
END LOOP;
CLOSE c_curs;
END;
Обратите внимание: я знаю, как создать запись из курсора, который определяется оператором select, как описано здесь . Чего я не знаю, так это как использовать ту же технику для рекурсоров.
РЕДАКТИРОВАТЬ:
Код от здесь только то, что мне нужно, но выдает ошибку:
set serveroutput on
VAR c_curs refcursor;
EXECUTE pck_prov.get_value_type_list(1, :c_curs);
BEGIN
FOR record_test IN :c_curs LOOP
dbms_output.put_line(record_test.id);
END LOOP;
END;
Ошибка: ошибка PLS-00456: элемент 'SQLDEVBIND1Z_1' не является курсором.
Просто чтобы уточнить вопрос:
В моей базе данных есть около 200 упаковок. Каждый пакет имеет несколько хранимых процедур внутри, и обычно каждая процедура объединяется со столбцами из разных таблиц. Вот почему было бы лучше иметь динамически создаваемый курсор, поэтому я могу сделать простой выбор, как в примере, который я опубликовал.