Иван Сергеевич Задворьев

Язык PL/SQL


Скачать книгу

из них не станет истинным, а затем возвращает результат связанного с ним выражения. В этом заключается отличие выражения CASE от команды CASE – команда CASE управляет потоком других команд, а выражение CASE вычисляется и его значение может быть присвоено переменным, использовано в других выражениях и т. д.

      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>> – установка метки 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