Иллюстрированный самоучитель по PostgreSQL

Переменные

Аргументы

При вызове функции PL/pgSQL могут получать аргументы различных типов. В аргументах пользователь передает исходные данные, необходимые для работы функции. Аргументы делают функции PL/pgSQL более универсальными и значительно расширяют область их возможного применения. Список аргументов приводится после имени функции в круглых скобках и разделяется запятыми.

Количество и типы аргументов должны соответствовать первоначальному определению функции. В листинге 11.21 приведены примеры двух вызовов функции из клиента psql.

Листинг 11.21. Примеры вызовов функций.

booktown=# SELECT get_author('John');
get_author
John Worsley
(1 row)

booktown=# SELECT
get_author(1111);
get_author
Ariel Denham
(1 row)

Примечание
Функции get_author(text) и get_author(integer) будут рассмотрены позднее в этой главе
.

Аргументы, полученные функцией, поочередно присваиваются идентификаторам, состоящим из знака доллара ($) и порядкового номера. Первому аргументу соответствует идентификатор $1, второму – $2 и т. д. Максимальное количество аргументов равно 16, поэтому идентификаторы аргументов лежат в интервале от $1 до $16. В листинге 11.22 приведен пример функции, которая удваивает свой целочисленный аргумент.

Листинг 11.22. Непосредственное использование аргументов в переменных.

CREATE FUNCTION double_price (float) RETURNS float AS '
DECLARE BEGIN
--Вернуть значение аргумента, умноженное на 2.
return $1 * 2:
END:
' LANGUAGE 'plpgsql';

Если функция имеет большое количество аргументов, в обозначениях вида "$+номер" легко запутаться. Чтобы программисту было проще отличить одни аргумент от другого (или если он хочет присвоить переменной аргумента более содержательное имя), в PL/pgSQL предусмотрена возможность определения псевдонимов переменных.

Псевдоним создается при помощи ключевого слова ALIAS и представляет собой альтернативный идентификатор для ссылки на аргумент. Перед использованием все псевдонимы (как и обычные переменные) должны быть объявлены в секции объявлений блока. В листинге 11.23 показан синтаксис применения ключевого слова ALIAS.

Листинг 11.23. Синтаксис использования ключевого слова ALIAS.

CREATE FUNCTION функция (аргументы) RETURNS тип AS '
DECLARE
идентификатор ALIAS FOR $1:
идентификатор ALIAS FOR $2:
BEGIN
END.:"
' LANGUAGE 'plpgsql':

В листинге 11.24 приведен простой пример, демонстрирующий применение псевдонимов в функциях PL/pgSQL. Функция triplе_рriсе() получает вещественное число, умножает его на три и возвращает результат.

Листинг 11.24. Псевдонимы PL/pgSQL.

CREATE FUNCTION triple_pnce (float) RETURNS float AS '
DECLARE
--Переменная input_price объявляется как псевдоним
--для переменной аргумента, обычно обозначаемой
--идентификатором $1 .input_price ALIAS FOR $1:
BEGIN
– Вернуть аргумент, умноженный на три.
RETURN input_price * 3:
END:
' LANGUAGE 'plpgsql':

Если теперь вызвать функцию triple_pnce() при выполнении команды SQL SELECT в клиенте psql, будет получен результат, показанный в листинге 11.25.

Листинг 11.25. Результат вызова функции triple_price().

booktown=# SELECT triple_price(12.50);
triple_price
37.5
(1 row)
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.