Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_KL_2010_14.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
28.97 Mб
Скачать

Аргументы

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

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

В листинге 6.15 приведены примеры двух вызовов функции из клиента psql.

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

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. В листинге 6.16 приведен пример функции, которая удваивает свой целочисленный аргумент.

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

CREATE FUNCTION double_price (float) RETURNS float AS '

DECLARE

BEGIN

-- Вернуть значение аргумента, умноженное на 2.

return $1 * 2;

END;

' LANGUAGE 'plpgsql';

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

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

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

CREATE FUNCTION функция (аргументы) RETURNS тип AS '

DECLARE

идентификатор ALIAS FOR $1;

идентификатор ALIAS FOR $2;

BEGIN

END;

' LANGUAGE 'plpgsql';

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

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

CREATE FUNCTION triple_price (float) RETURNS float AS '

DECLARE

-- Переменная input_price объявляется как псевдоним

-- для переменной аргумента, обычно обозначаемой

-- идентификатором $1.

input_price ALIAS FOR $1;

BEGIN

-- Вернуть аргумент, умноженный на три.

RETURN input_price * 3;

END;

' LANGUAGE 'plpgsql';

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

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

booktown=# SELECT triple_price(12.50);

triple_price

37.5

(1 row)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]