Команда выполняет некоторое действие в коде PL/pgSQL - например, присваивает значение переменной или выполняет запрос. Последовательность команд в программных блоках PL/pgSQL определяет порядок выполнения действий в этом блоке. Большая часть команд обычно размещается в основной части блока, находящейся между ключевыми словами BEGIN и END. Некоторые команды также могут присутствовать в секции объявлений (после ключевого слова DECLARE), но они всего лишь объявляют и/или инициализируют переменные, используемые в программном блоке.
Каждая команда завершается символом точки с запятой (;). В этом прослеживается сходство с языком SQL, в котором команды завершаются этим же символом. Почти вся оставшаяся часть этой главы посвящена типам команд, их использованию и основным задачам, решаемым при помощи команд в PL/pgSQL.
Выражения
Выражения представляют собой условную запись последовательности операций, результат которой принадлежит одному из базовых типов данных PostgreSQL. В листинге 6.4 приведена простая функция PL/pgSQL, возвращающая результат простого выражения, а в листинге 6.5 продемонстрирован результат вызова этой функции в psql.
|
|
Листинг 6.4. Использование выражений
CREATE OR REPLACE FUNCTION books.a_function() RETURNS int4 AS '
DECLARE
an_integer int4;
BEGIN
an_integer:= 10 * 10;
return an_integer;
END;
' LANGUAGE ‘plpgsql’ VOLATILE
Листинг 6.5. Результат вызова функции a_function()
SELECT books.a_function();
Ответ: 100.
Переменные
Переменные используются в программах PL/pgSQL для хранения изменяемых данных заранее определенного типа.
Типы данных
Переменные PL/pgSQL могут относиться к любому из стандартных типов данных SQL (например, integer или char). Помимо типов данных SQL, в PL/pgSQL также предусмотрен дополнительный тип RECORD, предназначенный для хранения записей без указания полей - эта информация передается при сохранении данных в переменной. Дополнительная информация о типе данных RECORD приводится ниже. Типы данных SQL были описаны в разделе 3.1.5. Самые распространенные типы PL/pgSQL: Boolean, text, char, integer, double precision, date, time.