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

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

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

Синтаксис команды RETURN приведен в листинге 6.20.

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

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

DECLARE

объявление;

[...]

BEGIN

команда;

[...]

RETURN { переменная \ значение }

END;

' LANGUAGE 'plpgsql' ;

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

6.1.5.Атрибуты

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

Атрибут %type

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

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

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

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

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

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

CREATE FUNCTION get_author (text) RETURNS text AS '

DECLARE

-- Объявление псевдонима для аргумента функции.

-- в котором должно передаваться имя автора,

f_name ALIAS FOR $1;

-- Объявление переменной, тип которой совпадает

-- с типом поля last_name таблицы authors.

l_name authors.last_name l TYPE;

BEGIN

-- Найти в таблице authors фамилию автора.

-- имя которого совпадает с переданным аргументом.

-- и присвоить ее переменной l_name.

SELECT INTO l_name last_name

FROM authors

WHERE first_name = f_name;

- Вернуть имя и фамилию, разделенные пробелом,

return f_name || '' '' || l_name;

END;

' LANGUAGE 'plpgsql';

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

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

booktown=# SELECT get_author('Andrew');

get_author

Andrew Brook Ins

(1 row)

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