Переменные
Аргументы
При вызове функции 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)