Аргументы
При вызове функции PL/pgSQL могут получать аргументы различных типов. В аргументах пользователь передает исходные данные, необходимые для работы функции. Аргументы делают функции PL/pgSQL более универсальными и значительно расширяют область их возможного применения. Список аргументов приводится после имени функции в круглых скобках и разделяется запятыми.
Количество и типы аргументов должны соответствовать первоначальному определению функции.
В листинге 6.15 приведен пример вызова функции.
Листинг 6.15. Пример вызова функции
SELECT books.get_author('Margaret');
Ответ: Margaret Brown.
ПРИМЕЧАНИЕ. Функции get_author(text) и get_author(integer) будут рассмотрены позднее в этой главе.
Аргументы, полученные функцией, поочередно присваиваются идентификаторам, состоящим из знака доллара ($) и порядкового номера. Первому аргументу соответствует идентификатор $1, второму - $2 и т. д.
Максимальное количество аргументов равно 16, поэтому идентификаторы аргументов лежат в интервале от $1 до $16. В листинге 6.16 приведен пример функции, которая удваивает свой целочисленный аргумент.
Листинг 6.16. Непосредственное использование аргументов в переменных
CREATE OR REPLACE FUNCTION books.double_price(real)
RETURNS real AS
$BODY$
DECLARE
BEGIN
-- Вернуть значение аргумента, умноженное на 2.
return $1 * 2;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
Если функция имеет большое количество аргументов, в обозначениях вида «$+номер» легко запутаться. Чтобы программисту было проще отличить одни аргумент от другого (или если он хочет присвоить переменной аргумента более содержательное имя), в PL/pgSQL предусмотрена возможность определения псевдонимов переменных.
Псевдоним создается при помощи ключевого слова ALIAS и представляет собой альтернативный идентификатор для ссылки на аргумент. Перед использованием все псевдонимы (как и обычные переменные) должны быть объявлены в секции объявлений блока. В листинге 6.17 показан синтаксис применения ключевого слова ALIAS.
Листинг 6.17. Синтаксис использования ключевого слова ALIAS
CREATE FUNCTION функция (аргументы) RETURNS тип AS '
DECLARE
идентификатор1 ALIAS FOR $1;
идентификатор2 ALIAS FOR $2;
BEGIN
END;
' LANGUAGE ‘plpgsql’ VOLATILE
В листинге 6.18 приведен простой пример, демонстрирующий применение псевдонимов в функциях PL/pgSQL. Функция triple_price получает вещественное число, умножает его на три и возвращает результат.
Листинг 6.18. Псевдонимы PL/pgSQL
CREATE OR REPLACE FUNCTION books.triple_price(real)
RETURNS real AS
$BODY$
DECLARE
-- Переменная input_price объявляется как псевдоним
-- для переменной аргумента, обычно обозначаемой
-- идентификатором $1.
input_price ALIAS FOR $1;
BEGIN
-- Вернуть аргумент, умноженный на три.
RETURN input_price * 3;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
Если теперь вызвать функцию triple_price при выполнении команды SQL SELECT будет получен результат, показанный в листинге 6.19.
Листинг 6.19. Результат вызова функции triple_price()
SELECT books.triple_price(2e+037);
Ответ: 6e+037.
Дата добавления: 2015-02-03; просмотров: 861;