Основной алгоритм нашей функции заключается в циклической выборке записей из REF CURSOR, как показано в этом псевдокоде.

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

Теперь выполним в теле функции простую проверку «последнего ID региона», определяющую, изменилось ли значение, и если да, то вы полним массовую загрузку критериев:

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

| < Предыдущая | Следующая > |
|---|


