Конспект лекций по дисциплине «Сетевые базы данных», страница 23

В данной конфигурации выражение1, выражение1, … выражениеN могут быть любыми, а не только выражениями на равенство. При этом фраза CASE никаких выражений не содержит. Перепишем пример из п. 7.3, используя данный вариант оператора CASE.

DECLARE

H number;

BEGIN

select to_char(sysdate,’hh24’) into H from dual;

case

when (H>=8 AND H<=12) then

update my_tab set priznak=1;

when (H>=13 AND H<=17) then

update my_tab set priznak=2;

else

update my_tab set priznak=null;

end case;

END;

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

Оператор цикла LOOP является основной конструкцией, позволяющей повторять выполнение набора операторов (команд) несколько раз. В этой конструкции нет никакого способа выйти из цикла автоматически. Для выхода используется оператор “EXIT” или “EXIT WHEN (условие)” внутри 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;