Извините за то, что вы получили широкое название на вопрос, но я не нашел способ упростить его дальше.Как закодировать SYS_REFCURSOR с несколькими таблицами?
Я создаю пакет для клиента, этот пакет имеет процедуру, которая возвращает SYS_REFCURSOR
. Запрос, который его подает, представляет собой выбор из нескольких таблиц с примерно 20 полями. На второй процедуре мне нужно вызвать это и пропустить результаты для подачи других местоположений.
У меня возникли проблемы с использованием части цикла into
. Я не могу использовать table%ROWTYPE
. Я попытался объявить OBJECT
о процедуре, но это было запрещено. Должен ли я сделать FETCH XXX INTO LIST_OF_INDVIDUAL_VARIABLES
?
DECLARE
dt_field TABLE1.dt_field%TYPE;
p_resultset SYS_REFCURSOR;
p_individual OBJECT (
FIELD0 DATE,
FIELD1 TABLE.FIELD1%TYPE,
FIELD2 TABLE.FIELD2%TYPE,
FIELD3 TABLE.FIELD3%TYPE,
FIELD4 TABLE.FIELD4%TYPE
);
BEGIN
PACKAGE.PROCEDURE1(dt_field);
dbms_output.put_line(dt_field);
PACKAGE.PROCEDURE2(dt_field, p_resultset);
LOOP
-- this do not work
FETCH p_resultset INTO p_individual;
EXIT WHEN p_resultset%NOTFOUND;
-- DO STUFF ON EACH RETURNED ROW
END LOOP;
CLOSE p_resultset;
END;
_ "Я пытался объявить объект OBJECT, но ** он не был разрешен ** «_ В результате вашей политики предприятия? Из-за отсутствия необходимых разрешений? Или это просто порождает какую-то ошибку? –
Взгляните на этот ответ Alex Poole, возможно: http://stackoverflow.com/a/11233929/2363712 –
Вам нужно объявить тип записи в PL/SQL, а не объект, а затем экземпляр этого тип записи. Показ ошибки, которую вы получите, будет полезен. Я не уверен, что вы можете взять курсор ref в тип записи, вне его. –