Информационное обеспечение



бет12/56
Дата05.03.2023
өлшемі256,49 Kb.
#71567
түріПрактикум
1   ...   8   9   10   11   12   13   14   15   ...   56
Оператор IF. Оператор IF в PL/SQL имеет несколько разновидностей.

  1. IF <условие> THEN

<последовательность операторов, когда результат проверки равен TRUE> END IF;

  1. IF <условие> THEN

<последовательность операторов, когда результат проверки равен TRUE> ELSE
<последовательность операторов, когда результат проверки равен FALSE> END IF;

  1. IF <условие1> THEN

<последовательность операторов, когда результат проверки 1 равен TRUE>
ELSIF <условие 2> THEN
<последовательность операторов, когда результат проверки 2 равен TRUE>
[ELSE <операторы else>] END IF;
Конструкция IF-THEN-ELSIF в какой-то мере является аналогом опера- тора CASE.

DECLARE
x NUMBER := 6; BEGIN


IF x = 3 THEN DBMS_OUTPUT.PUT_LINE ('x=3');
ELSIF x = 5 THEN DBMS_OUTPUT.PUT_LINE ('x=5');
ELSIF x = 10THEN DBMS_OUTPUT.PUT_LINE ('x=10');
ELSE
DBMS_OUTPUT.PUT_LINE ('x NOT IN (3,5,10) '); END IF;
END;
/


Оператор CASE. Начиная с Oracle9i поддерживаются два типа операто- ров CASE:

  • простой оператор CASE связывает одну или несколько последователь- ностей операторов PL/SQL с соответствующим значением (последовательность для выполнения выбирается с учетом результатов вычисления выражения, воз- вращающего указанное значение);

  • поисковый оператор CASE выбирает для выполнения одну из последо- вательностей операторов в зависимости от результатов вычисления списка ло- гических условий (выполняется последовательность операторов, связанная с первым условием, результат проверки которого оказался равным TRUE).

В дополнение к операторам CASE PL/SQL поддерживает CASE- выражения. Выражение CASE очень похоже на оператор CASE, оно позволяет выбрать для вычисления одно или несколько выражений. В итоге получается одно значение, тогда как результатом работы оператора CASE является выпол- нение последовательности операторов PL/SQL.
Оператор CASE имеет следующий синтаксис:

CASE <выражение>


WHEN <результат 1> THEN <операторы 1>
WHEN <результат 2> THEN <операторы 2>

WHEN <результат N> THEN <операторы N> [ ELSE
<операторы else> ] END CASE;
Предыдущий пример можно переписать в виде

DECLARE
x NUMBER := 6; BEGIN


CASE x
WHEN 3THEN DBMS_OUTPUT.PUT_LINE ('x=3');
WHEN 5 THEN DBMS_OUTPUT.PUT_LINE ('x=5');
WHEN 10 THEN DBMS_OUTPUT.PUT_LINE ('x=10');
ELSE
DBMS_OUTPUT.PUT_LINE ('x not in (3,5,10) '); END CASE;
END;
/

Если в этом примере не задать ключевое слово ELSE, то PL/SQL иниции- рует исключение


ERROR at line 1:


ORA-06592: CASE not found while executing CASE statement ORA-06512: at line 4

В этом заключается основное отличие оператора CASE от IF..ELSIF. В случае оператора IF при отсутствии ELSE и в случае невыполнения условия ни- чего не происходит и управление передается следующему за END IF оператору.


Синтаксис поискового оператора CASE:

CASE
WHEN <выражение 1> THEN <операторы 1>


WHEN <выражение 1> THEN <операторы 2>

WHEN <выражение 1> THEN <операторы N> [ ELSE
<операторы else>] END CASE;
Максимальное количество аргументов в операторе CASE 255, причем каждое выражение «WHEN ... THEN» рассматривается как два аргумента.
Выражения CASE. Выражения CASE работают аналогично операторам CASE, но не для исполняемых операторов, а для выражений. Простое выраже- ние CASE позволяет выбрать для вычислений одно из нескольких выражений на основе заданного скалярного значения:
<простое_выражение_case> := CASE <выражение>
WHEN<результат1>THEN<результирующее выражение 1>
WHEN<результат2>THEN<результирующее выражение 2>
...
ELSE
<результирующее выражение else> END;
Поисковое выражение CASE:
<поисковое_выражение_case> := CASE
WHEN<выражение1>THEN<результирующее выражение 1>
WHEN<выражение2>THEN<результирующее выражение 2>
...
ELSE
<результирующее выражение else> END;
/
Пример использования:
DECLARE

  1. NUMBER :=6;

  2. NUMBER :=0; BEGIN

y:= CASE x
WHEN 3 THEN 9
WHEN 5 THEN 15
WHEN 10 THEN 50
ELSE 100 END;
DBMS_OUTPUT.PUT_LINE ('x='||x||' y='||y); END;
/
Оператор CASE также можно использовать в SQL-запросах: SELECT job_id, job_title,
CASE WHEN max_salary <5000 THEN 'младший персонал'
WHEN max_salary BETWEEN 5000 AND 10000 THEN 'АУП' ELSE 'ВЫСШЕЕ РУКОВОДСТВО'
END
FROM jobs;
Циклы. Цикл начинается с зарезервированного слова, должен содержать условие завершения и заканчиваться оператором END LOOP. В PL/SQL имеет- ся несколько вариантом циклов:

  1. простые циклы;

  2. условные циклы (WHILE);

  3. интерактивные циклы (FOR). Пути выхода из циклов:

  • EXIT – безусловный выход из цикла. Используется посредством при- менения оператора IF.

  • EXIT WHEN – выход при выполнении условия.

  • GOTO – выход из цикла во внешний контекст. Синтаксис простого цикла:

LOOP
<исполняемые операторы>


| END LOOP;

Простой цикл может завершаться оператором EXIT или EXIT WHEN<условие>, который должен в теле цикла присутствовать обязательно, иначе цикл выполняется бесконечно. Простой цикл применяется:



  • когда неизвестно, сколько раз будет выполнен цикл;

  • когда необходимо, чтобы он выполнился хотя бы один раз. Рассмотрим пример:

DECLARE
i INTEGER := 0; y INTEGER := 10; BEGIN


LOOP
IF i >= y THEN EXIT; END IF;
i:= i + 1;
END LOOP;
DBMS_OUTPUT.put_line (i); END;
/




Достарыңызбен бөлісу:
1   ...   8   9   10   11   12   13   14   15   ...   56




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет