Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_BD_Full.docx
Скачиваний:
40
Добавлен:
13.09.2019
Размер:
945 Кб
Скачать
☆
  1. Pl/sql. Условные операторы if

Самым простым оператором ветвления в использовании, в PL/SQL является оператор IF. Его основная логическая форма имеет вид:

IF(некоторое условие справедливо) THEN

-- условие справедливо, выполнять это.

ELSE -- условие не выполняется

-- выполнять оператор в этой части.

END IF; -- конец условного оператора.

Так же для экономии памяти, возможно использовать конструкцию, типа:

IF(некоторое условие справедливо) THEN -- проверка условия

BEGIN

-- условие справедливо, выполнять это.

.

END;

ELSE -- условие не выполняется

DECLARE

x NUMBER;

BEGIN

.

END;

END IF; -- конец условного оператора.

В этом случае переменная x будет создана, если условие предыдущего блока ложно. Хотя использовать, такие конструкции не всегда оправдано. Так же условные операторы в PL/SQL вычисляются с помощью так называемой "сокращенной" оценки. Допустим, есть такое условие:

IF( a AND b ) THEN -- проверка условия

BEGIN

.

END;

END IF; -- конец условного оператора.

Если выражение a равно FALSE, то дальнейшее выражение не вычисляется! Все выражения вычисляются слева направо, а выражения в скобках, имеют наивысший приоритет. 

Так же существует конструкция IF - THEN - ELSIF. Работает она следующим образом:

IF ( val = 1 ) THEN -- проверка условия

.

ELSIF ( val = 2 ) THEN

.

ELSIF ( val = 3 ) THEN

.

ELSIF ( val = 9 ) THEN

.

ELSE -- не сработало не одно из условий!

END IF; -- конец условного оператора.

Пример:

SET SERVEROUTPUT ON

DECLARE

A INTEGER := 7;

B INTEGER := 4;

OPER VARCHAR2(2) := '+';

BEGIN

DBMS_OUTPUT.enable;

IF (OPER = '+') THEN

DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'sum = '||TO_CHAR(A+B));

ELSIF (OPER = '-') THEN

DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'res = '||TO_CHAR(A-B));

ELSIF (OPER = '*') THEN

DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'mul = '||TO_CHAR(A*B));

ELSIF (OPER = '/') THEN

DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'div = '||TO_CHAR(A/B));

END IF;

END;

/

  1. Pl/sql. Циклы

Как и во всех языках программирования, в PL/SQL имеются операторы циклов. Их три основных типа:

    1. Безусловные циклы (выполняемые бесконечно)

    2. Интерактивные циклы (FOR)

    3. Условные циклы (WHILE)

Самый простой тип цикла в языке PL/SQL таков:

LOOP

NULL;

END LOOP

/

Но использовать такой цикл нет смысла, да и для экземпляра БД это не безопасно. Для этого необходимо использовать определенные пути выхода из циклов. Их то же три:

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

  2. EXIT WHEN - Выход при выполнении условия.

  3. GOTO - Выход из цикла во внешний контекст.

Пример с LOOP EXIT WHEN:

DECLARE

i NUMBER := 0;

BEGIN

LOOP -- start loop 1

i := i + 1;

IF (i >= 100) THEN

i := 0;

EXIT; -- exit when i >= 0

END IF;

END LOOP; -- end loop 1

LOOP -- start loop 2

i := i + 1;

EXIT WHEN (i >= 100); -- exit when i >= 0

END LOOP; -- end loop 2--------

END;

/

Пример LOOP EXIT WHEN END LOOP:

DECLARE

k NUMBER := 0;

BEGIN

WHILE (k < 10) LOOP

k := k + 1;

END LOOP;

END;

/

Пример с FOR:

BEGIN

FOR i IN 1..100 LOOP

NULL;

END LOOP;

END;

/

Пример с GOTO:

SET SERVEROUTPUT ON

DECLARE

s NUMBER := 0;

BEGIN

DBMS_OUTPUT.enable;

LOOP

IF(MOD(s, 2) = 1) THEN

GOTO LESS;

END IF;

DBMS_OUTPUT.put_line(TO_CHAR(s)||' is even!');

<<LESS>>

EXIT WHEN (s = 20);

s := s + 1;

END LOOP;

END;

/

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]