DECLARE

lamda NUMBER := 0.50;

text1 VARCHAR2(30) := 'Инфракрасное излучение';

text2 VARCHAR2(30) := 'Видимый свет';

text3 VARCHAR2(30) := 'Ультрафиолет';

answer VARCHAR2(30);

BEGIN

answer := CASE WHEN (lamda > 0.65) THEN text1

WHEN (Lamda < 0.41) THEN text3

ELSE text2

END;

DBMS_OUTPUT.PUT_LINE(answer);

END;

Команда перехода GOTO

Команда перехода GOTO позволяет осуществить переход по метке, присутствующей в коде PL/SQL. С помощью уникального идентификатора, заключенного в двойные угловые скобки (метки), можно пометить любую часть исполняемого блока PL/SQL для перехода в это место.

SQL> DECLARE

2 s NUMBER := 1;

3 BEGIN

4 IF s = 1 THEN

5 GOTO mybranch; – переход по метке mybranch

6 ELSE

7 s := 1;

8 END IF;

9 <> – установка метки mybranch

10 NULL;

11 END;

12 /

PL/SQL procedure successfully completed.

Команда GOTO в языках программирования является объектом критики, поскольку чрезмерное ее применение приводит к созданию нечитаемого «спагетти-кода». Впервые эта точка зрения была отражена в статье Эдсгера Дейкстры «Доводы против команды GOTO», в которой утверждалось, что квалификация программистов обратно зависит от частоты использования команды GOTO в их программах. Многие преподаватели не принимают написанные студентами программы с командами GOTO по той причине, что наличие GOTO свидетельствует о неумении правильно структурировать исходный код.

Команда NULL

Команда NULL («пустая» команда) обычно используется как «заглушка» в месте, где надо написать какую-нибудь команду, потому что ничего не написать там нельзя по требованиям синтаксиса PL/SQL. Потом, по мере появления определенности, «заглушка» заменяется на функциональный код:

CASE sex

WHEN 'М' THEN

sex_decoded := 'male';

WHEN 'F' THEN

sex_decoded := 'female';

ELSE

NULL; – toDo: write code for exception sex not in list {F,M} ;))

END CASE;

Также команда NULL используется при обработке исключений, когда обработка какого-нибудь исключения заключается в отсутствии каких-либо действий (ничегонеделании). Такая практика «замалчивания» исключений обычно не приветствуется, так как она приводит к сложно выявляемым проблемам и неожиданным результатам работы программ.

Циклы

В языке PL/SQL имеется три вида циклов:

простой цикл, который начинается с ключевого слова LOOP и завершается командой END LOOP;

цикл WHILE с предусловием, который позволяет выполнить одну и ту же последовательность команд, пока проверяемое условие истинно;

цикл FOR со счетчиком.

Простой цикл

Простой цикл рассмотрим на примере определения числа, факториал которого является наименьшим числом, впервые превышающим заданную константу (1 000 000 000).

SQL> DECLARE

2 arg NUMBER; – Переменная для вычисления факториала

3 i NUMBER; – Переменная-счетчик

4 limit NUMBER := 1000000000; – Граница

5 text1 VARCHAR2(80) := 'n! числа, впервые превышающий 1000000000';

6

7 BEGIN

8 i := 0;

9 arg := 1;

10 LOOP

11 EXIT WHEN arg > limit;

12 arg := arg*(i+1);

13 i := i + 1;

14 END LOOP;

15 DBMS_OUTPUT.PUT_LINE(text1);

16 DBMS_OUTPUT.PUT_LINE(TO_CHAR(arg));

17 DBMS_OUTPUT.PUT_LINE('Искомое число = '||TO_CHAR(i));

18 END;

/


n! числа, впервые превышающий 1000000000

6227020800

Искомое число = 13

PL/SQL procedure successfully completed.

Из любого цикла в PL/SQL можно выйти командой EXIT с указанием логического условия выхода. В основном команда EXIT используется в простых циклах, потому что в циклах FOR и WHILE и так явно указываются условия окончания цикла, а иметь в коде больше одного условия окончания для цикла является плохим стилем программирования.

Если происходит зацикливание (выполнение бесконечного цикла без выхода из него), то программа PL/SQL «уходит в себя» («повисает»). Для прекращения выполнения такой программы в SQL*Plus следует нажать на клавиатуре комбинацию клавиш Ctrl+C: