Итак, у меня есть цикл for, который обрабатывает список идентификаторов и выполняет довольно сложные вещи. Не вдаваясь во все безобразные детали, в основном это:
DECLARE
l_selected APEX_APPLICATION_GLOBAL.VC_ARR2;
...snip...
BEGIN
-- get the list ids
l_selected := APEX_UTIL.STRING_TO_TABLE(:P4_SELECT_LIST);
-- process each in a nice loop
FOR i IN 1..l_selected.count
LOOP
-- do some data checking stuff...
-- here we will look for duplicate entries, so we can noop if duplicate is found
BEGIN
SELECT county_id INTO v_dup_check FROM org_county_accountable
WHERE organization_id = :P4_ID AND county_id = v_county_id;
-- NEXT;! NOOP;! but there is no next!
EXCEPTION WHEN NO_DATA_FOUND THEN
dbms_output.put_line('no dups found, proceeding');
END;
-- here we have code we only want to execute if there are no dupes already
IF v_dup_check IS NULL THEN
-- if not a duplicate record, proceed...
ELSE
-- reset duplicate check variable
v_dup_check := NULL;
END;
END LOOP;
END;
Как я обычно это делаю, выбирая значение, а затем оборачивая следующий код в проверку оператора IF, чтобы убедиться, что дублирующая переменная проверки имеет значение NULL. Но это раздражает. Я просто хочу иметь возможность сказать СЛЕДУЮЩИЙ; или NOOP; или что-то. Тем более, что я уже должен поймать исключение NO_DATA_FOUND. Я полагаю, что мог бы написать письмо в Oracle, но мне любопытно, как другие справляются с этим.
Я тоже мог бы обернуть это в функцию, но я искал что-то немного чище / проще.