Язык PL/SQL - стр. 17
Обратите внимание, что счетчик – управляющую переменную цикла (в данном случае i) объявлять в разделе объявлений не нужно, она объявляется автоматически с областью видимости между ключевыми словами LOOP и END LOOP.
При рассмотрении циклов FOR обычно возникают два вопроса:
есть ли возможность сделать так, чтобы значения счетчика цикла не возрастали, а уменьшались?
есть ли возможность нетривиальных, то есть не на единицу, приращений шага счетчика цикла?
Цикл с ключевым словом REVERSE
Цикл со счетчиком, кратным 10
SQL> BEGIN
2 FOR i IN REVERSE 1..5 LOOP
3 DBMS_OUTPUT.PUT_LINE(i);
4 END LOOP;
5 END;
6 /
5
4
3
2
1
PL/SQL procedure successfully completed.
SQL> BEGIN
2 FOR i IN 1..20 LOOP
3 IF MOD(i,10)=0 THEN
4 – тело цикла
5 DBMS_OUTPUT.PUT_LINE(i);
6 END IF;
7 END LOOP;
8 END;
9 /
10
20
PL/SQL procedure successfully completed.
На оба вопроса ответы положительные – такие возможности в языке PL/SQL имеются. Для обратного цикла в конструкции FOR LOOP следует указать ключевое слово REVERSE. Для нетривиальных приращений нужно внутри цикла с помощью команды IF просто пропускать шаги с ненужными значениями счетчика. Счетчик цикла всегда изменяется на единицу, просто на некоторых шагах цикла ничего делать не нужно.
Команда CONTINUE
Команда CONTINUE появилась в версии Oracle 11g. При истинности условия, записанного в конструкции WHEN команды CONTINUE, выполнение текущей итерации цикла прекращается и происходит переход на начало следующей итерации.
Благодаря команде CONTINUE можно, например, вынести проверки в начало цикла. Перепишем приведенный выше пример с нетривиальным приращением счетчика цикла FOR без помещения кода обработки в условную команду IF:
BEGIN
FOR i IN 1..20 LOOP
CONTINUE WHEN MOD(i,10)!=0;
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;
END;
Работа с коллекциями
Коллекции относятся к составным типам данных PL/SQL. Так как основная операция с коллекцией – это перебор и обработка всех ее элементов, то естественно познакомиться с особенностями работы с коллекциями после того, как рассмотрены циклы.
Виды и свойства коллекций
Коллекция называется ограниченной, если заранее определены границы возможных значений индексов ее элементов. В противном случае коллекция называется неограниченной.
В PL/SQL есть три вида коллекций:
ассоциативные массивы (associative array) – неограниченные коллекции, объявляемые только в программах PL/SQL (поэтому в литературе иногда эти коллекции называются таблицами PL/SQL);
вложенные таблицы (nested tables) – неограниченные коллекции, типы данных на основе которых могут создаваться как объекты баз данных и объявляться в программах PL/SQL;