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

Атрибут %rowtype

Атрибут %ROWTYPE используется в PL/pgSQL для переменной-записи, имеющей одинаковую структуру с записями заданной таблицы. Не путайте атрибут %ROWTYPE с типом данных RECORD  переменная с атрибутом ROWTYPE точно воспроизводит структуру записи конкретной таблицы, а переменная RECORD не структурирована и ей можно присвоить запись любой таблицы.

В листинге 6.24 приведена перегруженная версия функции get_author() (см. листинг 6.22). Она делает то же, что и прототип, но получает аргумент типа integer вместо text и ищет автора, сравнивая код с переданным аргументом.

Обратите внимание: в реализации функции используется переменная, объявленная с атрибутом %ROWTYPE. Возможно, в данном случае применение %ROWTYPE только напрасно усложняет очень простую задачу, но по мере изучения PL/pgSQL важность атрибута %ROWTYPE становится все более очевидной.

Точка (.) после имени переменной found_author в листинге 6.24 используется для ссылки на имя поля, входящего в структуру found_author.

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

CREATE FUNCTION get_author (integer) RETURNS text AS '

DECLARE

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

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

author_id ALIAS FOR $1;

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

-- совпадает со структурой таблицы authors,

found author authors ROWTYPE;

BEGIN

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

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

SELECT INTO found_author * FROM authors WHERE id = author_id;

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

RETURN found_author.first_name || " " || found_author.last_name;

END;

' LANGUAGE 'plpgsql':

Обратите внимание на звездочку (*) в списке полей команды SELECT. Поскольку переменная found_author объявлялась с атрибутом %ROWTYPE для таблицы authors, она имеет такую же структуру, как и записи таблицы authors. Таким образом, конструкция SELECT * заполняет переменную found_author значениями полей найденной записи. Пример вызова новой версии get_author() приведен в листинге 6.25.

Листинг 6.25. Вызов новой версии функции get_author()

booktown=# SELECT get_author(1212);

get_author

John Worsley

(1 row)

6.1.6.Конкатенация

Конкатенацией называется процесс построения новой строки посредством объединения двух (и более) строк. Конкатенация принадлежит к числу стандартных операций PostgreSQL и поэтому может напрямую использоваться с переменными в функциях PL/pgSQL. Это незаменимый инструмент форматирования при работе с несколькими переменными, содержащими символьные данные.

Конкатенация используется только со строками. Оператор конкатенации (|) ставится между объединяемыми компонентами (литералами или строковыми переменными).

В листинге 6.26 операция конкатенации создает строку, возвращаемую функцией.

Листинг 6.26. Возвращение результата конкатенации

CREATE FUNCTION compound_word (text, text) RETURNS text AS '

DECLARE

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

word1 ALIAS FOR $1;

word2 ALIAS FOR $2;

BEGIN

-- Вернуть объединение двух слов.

RETURN word1 || word2;

END;

' LANGUAGE 'plpgsql' ;

Если передать функции аргументы «break» и «fast», функция вернет объединенную строку «breakfast»:

booktown=# SELECT compound_word ('break', 'fast');

compound_word

breakfast

(1 row)

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