Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 повторное использование sql  [new]
D.R.Y.
Guest
я не особо спец по ораклу, по сему спрашиваю

вот допустим, есть процедура
в ней какие-то запросы
в которых используются одинаковые подзапросы

какие есть варианты повторного использования ?

- есть view
но их надо создавать как отдельный объект в БД
создавать view который используется только в одной процедуре как-то некрасиво
а если 20 процедур - 20 таких view ?

- есть динамический sql
тут нет проверки на этапе компиляции, и вообще выглядит не очень

- есть еще pipelined
может вполне вариант, но довольно громоздкий, и требует функции на уровне пакета.
локальную функцию нельзя.

мне не хватает какого-то простого варианта повторного использования,
который был бы локальным, но с проверками на компиляции.

может есть еще варианты которых я не знаю ??
подскажите.

ЗЫ with увы, работает только в рамках одного запроса.
26 май 16, 15:09    [19223636]     Ответить | Цитировать Сообщить модератору
 Re: повторное использование sql  [new]
-2-
Member

Откуда:
Сообщений: 15330
D.R.Y.
может есть еще варианты которых я не знаю ??
Copy-Paste
26 май 16, 15:15    [19223665]     Ответить | Цитировать Сообщить модератору
 Re: повторное использование sql  [new]
Гхостик
Guest
D.R.Y.
- есть view
но их надо создавать как отдельный объект в БД
создавать view который используется только в одной процедуре как-то некрасиво
а если 20 процедур - 20 таких view ?
Можно не сразу а по мере необходимости, появилась нужна использовать код повторно - выделяешь view.
26 май 16, 15:15    [19223670]     Ответить | Цитировать Сообщить модератору
 Re: повторное использование sql  [new]
Fogel
Member

Откуда:
Сообщений: 378
Если я правильно понял, есть один запрос, который нужно много где использовать.
В таком случае можно запихнуть этот запрос в функцию с выходом типа вложенная таблица или массив переменной длины и использовать её в качестве таблицы в других запросах.
что-то вроде:
select * from tab1 t1, table(функция) t2 where t1.id = t2.id


D.R.Y.
- есть еще pipelined
может вполне вариант, но довольно громоздкий, и требует функции на уровне пакета.
локальную функцию нельзя.


можно. пакет не обязателен.
pipelined - это признак конвейрности и всё.
а то, что для табличной функции ещё типы создают, и как правило, объединяют в пакеты, так тип можно и отдельно создать, без пакета.
26 май 16, 16:18    [19224063]     Ответить | Цитировать Сообщить модератору
 Re: повторное использование sql  [new]
Fogel
Member

Откуда:
Сообщений: 378
а вообще, конечно, конкретика нужна - тогда и метод можно выбрать более оправданно.
26 май 16, 16:20    [19224079]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить