Московский государственный университет имени М.В.Ломоносова
Опубликован: 05.01.2004 | Доступ: свободный | Студентов: 9476 / 1246 | Оценка: 4.04 / 3.84 | Длительность: 10:03:00
ISBN: 978-5-94774-539-9
Лекция 11:

Основы языка PL/SQL

< Лекция 10 || Лекция 11: 1234 || Лекция 12 >

Операторы управления языка PL/SQL

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

  • операторы выбора:
    • IF-THEN-END IF ;
    • IF-THEN-ELSE-END IF ;
    • IF-THEN-ELSIF-END IF ;
  • операторы цикла:
    • LOOP-END LOOP ;
    • WHILE-LOOP-END LOOP ;
    • FOR-LOOP-END LOOP ;
    • EXIT ;
    • EXIT WHEN ;
  • операторы безусловного перехода:
    • GOTO ;
    • NULL ;
    • <<labels>>.

Операторы выбора

Язык PL/SQL реализует три формы оператора выбора, которые могут иметь следующее формальное описание:

- 1 форма:

IF condition THEN sequence_of_statements; 
END IF;

- 2 форма:

IF condition THEN sequence_of_statements1;
ELSE sequence_of_statements2; END IF;

- 3 форма:

IF condition1 THEN sequence_of_statements1;
ELSIF condition2 THEN sequence_of_statements2;
   - Ключевое слово ELSIF 
   - может повторяться многократно
ELSIF condition3 THEN sequence_of_statements3;
ELSE sequence_of_statements4; END IF;
   - Ключевое слово ELSE может отсутствовать

Последовательность операторов (sequence_of_statements) может включать другой вложенный оператор выбора.

Например:

BEGIN
   IF f3 = 'abc' THEN
      UPDATE tbl1 SET f2 = f2 + 50 
	  WHERE f1 = 1;...
   ELSE
      UPDATE tbl1 SET f2 = f2 + 70 
	  WHERE f1 = 1;......
   END IF;

Операторы цикла

Оператор цикла позволяет многократно выполнять одну последовательность операторов. Язык PL/SQL реализует три формы операторов цикла, которые могут иметь следующее формальное описание:

- 1 форма - выход из цикла должен быть указан оператором выхода:

LOOP sequence_of_statements; END LOOP;

LOOP sequence_of_statements;
   EXIT WHEN boolean_expression;   
      - Оператор выхода из цикла
END LOOP;

<<label_of_loop>>  - Метка цикла
LOOP sequence_of_statements;
END LOOP label_of_loop;   
   - Конец помеченного цикла

- 2 форма - цикл выполняется, пока условие истинно:

WHILE condition LOOP sequence_of_statements;
END LOOP;

- 3 форма - цикл выполняется заданное число раз:

FOR counter IN [REVERSE] 
    lower_bound..higher_bound
LOOP sequence_of_statements;
END LOOP;

Для выхода из цикла используются операторы EXIT и EXIT-WHEN, а для выхода из блока PL/SQL - оператор RETURN.

Цикл FOR выполняется заданное число раз, пока значение счетчика цикла принадлежит указанному диапазону. Значение счетчика цикла FOR проверяется до выполнения цикла. Диапазон значений может быть указан через символ .. (две точки). Параметр REVERSE определяет обратный отсчет для переменной цикла. Диапазон значений может быть задан выражениями, но не должен изменяться внутри цикла.

Например:

- 1. цикл LOOP:

LOOP
   FETCH c1 INTO rec1;
   EXIT WHEN c1%NOTFOUND;

END LOOP;
- Выход из цикла, если нет
     - больше строк

- 2. цикл WHILE:

WHILE c1 >= 50 LOOP

- ...

c1:= c1 - 1;
END LOOP;

Операторы безусловного перехода

Оператор GOTO используется для безусловного перехода на заданную метку. Этот оператор может применяться для перехода во внешний блок, но его нельзя использовать для перехода во вложенный цикл или подблок.

Метка указывается в двойных угловых кавычках и используется для определения точки в программе, на которую может быть выполнен безусловный переход, или для квалификации имени переменной.

Оператор NULL - это пустой оператор, используемый для выполнения роли заглушки в теле функции или процедуры, или как оператор, перед которым можно указать метку.

Например:

DECLARE
   i1 INTEGER;
BEGIN
   FOR i IN 1..10 LOOP
      IF i1=1 THEN
         GOTO end_loop;   
		 - Переход на конец цикла
      END IF;
      - 
   <<end_loop>> 
   NULL;   - Оператор указывается для 
           - использования метки
   END LOOP; 
END;
< Лекция 10 || Лекция 11: 1234 || Лекция 12 >