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

Возвращение переменных

Тип величины, возвращаемой функцией PL/pgSQL, должен соответствовать типу возвращаемого значения, указанному при создании функции командой CREATE FUNCTION. Значение возвращается командой RETURN. Команда RETURN находится в конце функции, но она также часто встречается в командах IF или других командах, осуществляющих передачу управления в программе. Даже если команда RETURN вызывается в одной из этих команд, функция вес равно должна заканчиваться командой RETURN (даже если управление никогда не будет передано этой завершающей команде). Синтаксис команды RETURN приведен в листинге 11.26.

Листинг 11.26. Синтаксис команды RETURN.

CREATE FUNCTION функция (аргументы) RETURNS тип AS '
DECLARE
объявление:
[…] BEGIN
команда:
[…]
RETURN { переменная \ значение }
END:
' LANGUAGE 'plpgsql:

Пример использования команды RETURN можно найти в любой функции PL/pgSQL, встречающейся в этой главе.

Атрибуты

Для упрощения работы с объектами базы данных в PL/pgSQL существуют атрибуты переменных – UTYPE и UROWTYPE. Атрибуты требуются для объявления переменной, тип которой совпадает с типом объекта базы данных (атрибут TYPE) или структурой записи (атрибут UROWTYPE). Переменные объявляются с атрибутами в том случае, если они будут использоваться в программном блоке для хранения значений, полученных от объекта базы данных. Таким образом, при объявлении переменной с атрибутом знать тип объекта базы данных не обязательно. Если в будущем тип изменится, то переменная также автоматически переключится на новый тип данных, причем это не потребует дополнительных усилий со стороны программиста.

Атрибут %TYPE

Атрибут %TYPE используется при объявлении переменных с типом данных, совпадающих с типом некоторого объекта базы данных (чаще всего поля). Синтаксис объявления переменной с атрибутом %TYPE приведен в листинге 11.27.

Листинг 11.27. Объявление переменной с атрибутом %TYPE.

переменная таблица_поле%TYPE

В листинге 11.28 приведена функция, использующая атрибут %TYPE для хранения фамилии автора. В ней задействован оператор конкатенации (||), описанный ниже. Команда SELECT INTO рассматривалась ранее в этой главе.

В листинге 11.28 следует обратить особое внимание на атрибут %TYPE. Фактически мы объявляем переменную, тип которой совпадает с типом поля таблицы authors. Затем команда SELECT находит запись, у которой поле first_name совпадает с аргументом, переданным при вызове функции. Команда SELECT читает значение поля last_name этой записи и сохраняет его в переменной l_name. Пример вызова функции с передачей аргумента приведен ниже, в листинге 11.29. Кроме того, передача аргумента пользователем встречается во многих примерах этой главы.

Листинг 11.28. Использование атрибута %TYPE.

CREATE FUNCTION get_author (text) RETURNS text AS '
DECLARE
--Объявление псевдонима для аргумента функции.
--в котором должно передаваться имя автора,
f_name ALIAS FOR $1:
--Объявление переменной, тип которой совпадает
--с типом поля last_name таблицы authors.
I_name authors.lastjiamelTYPE:
BEGIN
--Найти в таблице authors фамилию автора.
--имя которого совпадает с переданным аргументом.
--и присвоить ее переменной Ijiame.
SELECT INTO Ijiame lastjiame FROM authors WHERE firstjiame – f_name:
– Вернуть имя и фамилию, разделенные пробелом,
return f_name || '' " || I_name:
END:
' LANGUAGE 'plpgsql':

В листинге 11.29 приведен пример вызова функции get_author().

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

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