Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СБД / Lec_2015 / конспект.doc
Скачиваний:
49
Добавлен:
11.04.2015
Размер:
852.48 Кб
Скачать

7.5. Оператор простого цикла (цикл loop)

Оператор цикла LOOPявляется основной конструкцией, позволяющей повторять выполнение набора операторов (команд) несколько раз. В этой конструкции нет никакого способа выйти из цикла автоматически. Для выхода используется оператор “EXIT” или “EXITWHEN(условие)” внутриLOOP. Например:

DECLARE

cnt number;

BEGIN

cnt := 0;

LOOP

INSERT INTO test VALUES(2 * cnt);

cnt := cnt +1;

IF cnt >= 8 THEN

EXIT;

END IF;

END LOOP;

END;

/

7.6. Оператор цикла с параметром (цикл for)

В тех случаях, когда нужно повторить набор команд фиксированное число раз, используется конструкция FOR. Например:

DECLARE

cnt number;

BEGIN

cnt := 0;

FOR cnt IN 1 .. 8 LOOP

INSERT INTO test VALUES(2 * cnt);

END LOOP;

END;

/

7.7. Оператор цикла с предусловием (цикл while)

В этой конструкции условие выхода из цикла проверяется при каждом проходе. Пример:

DECLARE

cnt number;

BEGIN

cnt := 0;

WHILE cnt < 8 LOOP

INSERT INTO test VALUES(2 * cnt);

cnt := cnt +1;

END LOOP;

END;

/

7.8. Оператор перехода goto

Операторы условных (IF-THEN и CASE) и циклических (LOOP, FOR и WHILE) вычислений (см. пп. 7.3–7.7) позволяют разрабатывать программы с нелинейной последовательностью выполнения команд. Используя эти операторы, мы можем перемещаться по программе, обходя группы команд или возвращаясь циклически к уже выполненным команда. Кроме этого PL/SQL предоставляет возможность совершать перемещения по программе с помощью оператора GOTO.

Использовать это оператор при программировании не рекомендуется, но в некоторых случаях GOTO является правильным решением.

Оператор GOTO имеет следующий синтаксис:

GOTO имя_метки;

Имя_метки – это идентификатор какого-либо места программы, который синтаксически оформляется следующим образом:

<<имя_метки>>

Двойные угловые скобки являются ограничителями метки, имена_меток играют роль указателей, доступных во время выполнения программы. В следующем примере показано, как GOTO используется для обхода участка программы.

BEGIN

DBMS_OUTPUT.PUT_LINE(‘Начало блока’);

GOTO m_last;

DBMS_OUTPUT.PUT_LINE(‘Пропускаемый оператор’);

RETURN ;

<<m_last>>

DBMS_OUTPUT.PUT_LINE(‘Конец блока’);

END;

/

В этом примере используется функция вывода на экран – DBMS_OUTPUT.PUT_LINE (см. 10). В результате выполнения программы получим следующий вывод:

Начало блока

Конец блока

В PL/SQL следует соблюдать следующие правила использования оператора GOTO^

  • GOTO не может ссылаться на метку, находящуюся во вложенном блоке;

  • нельзя, находясь вне оператора IF, выполнить оператор GOTO, ведущий внутрь этого оператора;

  • находясь внутри оператора IF, нельзя выполнить GOTO, ведущий к метке, находящейся внутри другого оператора IF;

  • нельзя с помощью GOTO переходить из секции исключительных ситуаций (EXCEPTION) в любую другую секцию блока.

Вопросы для самоконтроля

7.1. Какие формы условного оператора IF применяются в PL/SQL?

7.2. Какие условные операторы используются в PL/SQL кроме IF?

7.3. Чем отличается оператор LOOP от оператора FOR?

7.4. Как можно выйти из цикла LOOP?

7.5. Возможно ли использование оператора GOTO в программах PL/SQL?

7.6. Какой оператор цикла нужно использовать, если известно необходимое число проходов цикла?

7.7. Как синтаксически оформляется метка, на которую ссылается оператор GOTO?

7.8. Можно ли ссылаться на метку, находящуюся во внешнем блоке?

7.9. Допустимо ли перейти из секции EXCEPTION в секцию BEGIN с помощью оператора GOTO?

7.10. Какой из операторов правильно использовать для выхода их цикла – EXIT или EXITWHEN?

Соседние файлы в папке Lec_2015