Я пытаюсь получить 2 разных набора результатов из хранимой процедуры на основе одного запроса. Я пытаюсь сделать следующее:
1.) Вернуть результат запроса в курсор OUT;
2.) Из результатов этого курсора, получить все самые длинные значения в каждом столбце и вернуть как второй OUT resultset.
Я пытаюсь избежать повторения одного и того же с этим дважды - получаю данные, а после этого получаю самые длинные значения столбцов этих же данных. Я не уверен, если это вообще возможно, но если это так, может кто-нибудь показать мне, КАК?
Это пример того, что я хочу сделать (только для иллюстрации):
CREATE OR REPLACE PROCEDURE MySchema.Test(RESULT OUT SYS_REFCURSOR,MAX_RESULT OUT SYS_REFCURSOR)
AS
BEGIN
OPEN RESULT FOR SELECT Name,Surname FROM MyTable;
OPEN MAX_RESULT FOR SELECT Max(length(Name)),Max(length(Surname)) FROM RESULT; --error here
END Test;
Этот пример компилируется с « ORA-00942: таблица или представление не существует ».
Я знаю, что это глупый пример, но я изучал и тестировал все виды вещи (неявные курсоры, выборочные курсоры, вложенные курсоры и т. д. c.) и не нашли ничего, что могло бы мне помочь, особенно при работе с хранимой процедурой, возвращающей несколько наборов результатов.
Моя общая цель - сократить данные время экспорта в Excel. В настоящее время я должен выполнить один и тот же запрос дважды - один раз для расчета размера данных для автоматического подбора столбцов Excel, а затем для записи данных в Excel.
Я считаю, что манипулирование первым набором результатов с целью получения второго было бы намного быстрее - с меньшим количеством циклов БД.
Я использую Oracle 11g, Любая помощь очень ценится.