Сложные курсоры для возврата нескольких строк - PullRequest
0 голосов
/ 02 сентября 2010

Каждая строка в курсоре должна быть объединена с другой таблицей, и весь результат должен быть возвращен одним курсором

Скажем, курсор1 возвращает 5 строк. Каждая из этих 5 строк должна быть объединена с таблицей1. и окончательный результат для всех 5 строк должен быть возвращен в 1 строку.

Пожалуйста, помогите

Ответы [ 2 ]

1 голос
/ 02 сентября 2010

Довольно сложно объединить извлеченные записи из курсора ref с набором результатов другого запроса.Гораздо лучшей идеей было бы открыть только один курсор ref с помощью SELECT, который объединяет все соответствующие таблицы.

0 голосов
/ 03 сентября 2010

Вопрос не ясен, но, похоже, вам нужно что-то вроде этого

a) Определите тип объекта с помощью формы строки результата. B) Определите коллекцию этого типа объекта c.) Создайте функцию с типом возврата типа коллекции - это может принимать курсор A в качестве параметра (SYS_REFCURSOR), соединять каждую строку в курсоре A с таблицей B, а затем использовать PIPE ROW для каждой строки результата.d) Если конечный результат нужен в качестве курсора, тогда другая функция, аналогичная

 FUNCTION complex_query(in_cursor SYS_REFCURSOR) 
 RETURN SYS_REFCURSOR
 IS
     lreturn SYS_REFCURSOR;
 BEGIN
     OPEN lreturn FOR
        (SELECT * FROM TABLE(convert_to_collection(in_cursor)));
     RETURN lreturn;
 END;

В качестве альтернативы, вы можете просто выполнить SELECT * FROM TABLE (convert_to_collection (in_cursor)) напрямую.

Что я не понимаю, так это требование, чтобы все возвращалось в виде 1 строки.

...