END:
' LANGUAGE 'plpgsql';
Передача управления
Команды передачи управления существуют практически во всех
современных языках программирования, и PL/pgSQL не является
исключением. С технической точки зрения сам вызов функции можно
рассматривать как передачу управления последовательности команд
PL/pgSQL. Тем не менее существуют и другие, более совершенные средства,
определяющие последовательность выполнения команд PL/pgSQL. Здесь
речь пойдет об условных командах IF/THEN и циклах.
Команда IF/THEN/ELSE задает команду (или блок команд),
выполняемых в случае истинности некоторого условия. Синтаксис команды
IF/THEN/ELSE:
CREATE FUNCTION функция (.аргументы) RETURNS тип AS '
DECLARE
объявления
BEGIN
IF условие THEN
Команда;
[...]
[ELSE
Команда;
[...]
]END
IF;
END:
LANGUAGE 'plpgsql':
Квадратные скобки, обрамляющие секцию ELSE, означают, что эта
секция может быть опущена.
Циклы
Самый простой вид цикла, используемого в PL/pgSQL, – безусловный.
Его синтаксис:
LOOP
команда ;
[...]
END LOOP;
Для выхода из цикла служит команда EXIT. Она также может
содержать метку или условие заверешения:
[ «метка» ]
LOOP
команда;
[...]
EXIT [ метка ] [ WHEN условие ];
END LOOP;
Цикл WHILE выполняет блок команд до тех пор, пока заданное
условие не станет ложным. Синтаксис использования следующий:
[ «метка» ]
WHILE условие LOOP
команда;
[...]
END LOOP;
Перейдем к рассмотрению циклов FOR. Возможно, циклы FOR —
самая важная разновидность циклов, реализованных в PL/pgSQL. Цикл FOR
выполняет программный блок для целых чисел из заданного интервала. Ниже
будет описан синтаксис цикла FOR.
[ «метка» ]
FOR переменная IN [ REVERSE ] выражение1 .. выражение2 LOOP
команда;
END LOOP:
Цикл FOR выполняет одну итерацию для каждого значения
переменной переменная в интервале, границы которого определяются
выражениями выражение1 и выражение2 (включительно). Управляющую
переменную цикла не обязательно объявлять вне блока FOR, если вы не
собираетесь работать с ней после завершения цикла.
Циклы FOR также могут использоваться для перебора результатов
запросов – ниже представлен соответствующий пример 7.4. Обратите
внимание, что в примере используются не двойные кавычки, а дважды
одинарные, как способ экранирования, т.к. тело функции само заключено в
одинарные кавычки.
|