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

Откуда:
Сообщений: 30
- Есть некий запрос, который возвращает данные из БД по заданным параметрам, например по дате "с" и "по".

- Возвращаемые этим запросом столбцы являются аргументами для функции данные в этих столбцах не просто поля в базе, а результат какого то вычисления запроса.

- Функция рассчитывает данные внутри и возвращает строку с результатом для каждой строки главного запроса.

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

- Как можно реализовать функцию, чтобы она читала данные из базы для расчета данных главного запроса, не для каждой строки, а например один раз читала данные из базы сохраняла бы куда то, а после проводились бы вычисления?
10 фев 17, 09:13    [20199198]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с алгоритмом  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54380
global temporary table
10 фев 17, 09:18    [20199215]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с алгоритмом  [new]
rekrabbe
Member

Откуда:
Сообщений: 30
Большое спасибо, запрос стал отрабатывать в разы быстрее.
Реализовал следующим образом:
- Создал две global temporary tables on commit preserve rows
- Процедуру, которая заполняет эти временные таблицы, данными из старой функции
- Переделал старую функцию, теперь она выбирает данные из временных таблиц
- Функцию pipelined (после begin выполняется процедура по наполнению временных таблиц), которая реализует главный запрос и в ней же подставляется функция с выборкой из временных таблиц
10 фев 17, 15:01    [20200924]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить