В общем суть такая.
У меня есть таблица с номером заказа, номером клиента, его статусом и суммой.
Я отбираю курсором все заказы по которым прошел отказ.
Затем через цикл их перебираю и делаю доп. условия через if.
В зависимости от суммы я проставлю в таблице клиента пометку. Если меньше 1000 - "ок", от 1000 до 5000 - "внимание", если свыше 5000 - "ахтунг".
Плюс делаю тяжёлый расчет аналитики по прочим параметрам.
Возникла необходимость, в случае если попался заказ с суммой выше "5000", то прочие заказы этого клиента не отрабатывать, что бы снизить время выполнения запроса.
Для этого хочу некий временный "массив" или "таблицу", куда буду записывать все номера заказов которые не подлежат дальнейшей обработке.
Но собственно не знаю как этот "массив" реализовать.
В коде это так:
DECLARE
type arr_table is TABLE of NUMBER;
arrItem arr_table;
BEGIN
FOR ord IN (SELECT
OrderNum,
OrderSum,
OrderClient
FROM Orders
WHERE status = 'Otkaz') LOOP
-- этот IF хочу обернуть во что-то вроде -- IF (ord.OrderNum Not in arrItem) THEN
-- что бы не обрабатывать остальные договора клиента
IF (ord.OrderSum > 5000)
THEN
-- этот вариант не подходит, т.к. перезатирается массив
SELECT OrderNum BULK COLLECT INTO arrItem FROM Orders WHERE OrderClient = ord.OrderClient
-- этот вариант не работает т.к. не понимает что такое arrItem
-- INSERT /*+append*/ INTO arrItem SELECT ncdaagrid FROM cda WHERE icdaclient = crAgr.icd1client;
ELSIF (ord.OrderSum > 1000) AND (ord.OrderSum < 5000)
THEN
--- тут функции разного рода подсчетов и аналитики.
END IF;
END LOOP;
END;