Размер шрифта
-
+

Язык 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;

Страница 17