Преобразование курсора в sql-таблицу (для дальнейшего использования в SQL-выражениях)

zsergeant
Дата: 02.12.2009 17:09:03
В частности сабж.
Ну и более общий вопрос на эту же тему к гуру:
Есть довольно сложный запрос и есть необходимость использования результатов его выборки в различных функциях. Реализовать его во View не получится, т.к. строится на основе параметров (кроме функции, возвращающей все тот же курсор на ум ничего не приходит). Необходимость помимо всего прочего обусловлена тем, что этот запрос может периодически правиться и плодить его в куче мест ну очень некрасиво и вообще чревато. Погуглив, нашел, что эту проблему можно решить с помощью pipelined-функций либо табличных функций. Однако, без создания соответствующих типов(которые так же необходимо будет править при полей запроса и их типов) опять же ничего не получится. Легче, но все-равно не слишком красиво.
Собственно вопрос: нет ли какого более лаконичного способа использования одного подзапроса в SQL-выражениях различных процедур/функций?
***************
Дата: 02.12.2009 17:18:00
view + sys_context
suPPLer
Дата: 02.12.2009 17:20:48
zsergeant,

0. "Реализовать его во View не получится, т.к. строится на основе параметров" - используйте пользовательский контекст. STFF create context view.
1. Всё же создайте соответствующие типы для работы с результатом запроса как с коллекцией и передавайте коллекцию как параметр и/или получайте её из табличных функций.
andrey_anonymous
Дата: 02.12.2009 18:22:23
zsergeant
Есть довольно сложный запрос и есть необходимость использования результатов его выборки в различных функциях.
...
кроме функции, возвращающей все тот же курсор
...

SQL> create package ane_p as
  2  cursor c is select * from dual;
  3  end;
  4  /

Package created
 
SQL> begin
  2  for i in ane_p.c loop
  3  dbms_output.put_line(i.dummy);
  4  end loop;
  5  end;
  6  /
 
X
 
PL/SQL procedure successfully completed
 
SQL> 
zsergeant
Дата: 04.12.2009 10:35:27
Спасибо огромное всем откликнувшимся. Пока склоняюсь к view и sys_conntext
vava
Дата: 04.12.2009 10:54:38
Прошу прощения, что влезаю в чужую тему, но вопрос очень близкий.
Подскажите, как в каком-либо запросе использовать курсор, возвращаемый функцией.
Ведь действительно, на все случаи типов не напасёшься.

Например, такое требуется, когда драйвер не поддерживает передачу курсоров.
zsergeant
Дата: 09.12.2009 14:11:42
(Vava)
Именно курсор использовать в SQL к сожалению невозможно. Только обсуждаемыми методами. Если без использования типов, то остается только view/
vava
Дата: 10.12.2009 12:44:54
Грустно.