Основной алгоритм нашей функции заключается в циклической выборке записей из REF CURSOR, как показано в этом псевдокоде.
Здесь все просто. Всего лишь извлекаем записи из переданного в функцию курсора и проверяем их на соответствие критериям повторного наряда. Если условие выполнено, отправляем запись в конвейер. Теперь добавим загрузку критериев для данного региона.
Благодаря тому, что наша табличная функция гарантирует, что записи будут сгруппированы по регионам, можно быть уверенным, что при каждом изменении идентификатора региона в извлекаемой записи происходит переход к следующему региону. А первое, что надо сделать для нового региона, - это загрузить его критерии повторных заказов в ассоциативный массив PL/SQL. Сделаем это при помощи такого курсора:
Теперь выполним в теле функции простую проверку «последнего ID региона», определяющую, изменилось ли значение, и если да, то вы полним массовую загрузку критериев:
Здесь проявляется еще одно преимущество табличных функций - возможность раздельного доступа к данным внутри самой функции. Это означает, что доступ к базе данных для получения нарядов может быть сконцентрирован в одном запросе, а для получения критериев - в другом.
Вернемся к нашей функции, псевдокод которой после добавления запроса критериев выглядит так:
< Предыдущая | Следующая > |
---|