ВУЗ:
Составители:
Рубрика:
– 130 –
В листинге 6.22 следует обратить особое внимание на атрибут
%TYPE. Фак-
тически мы объявляем переменную, тип которой совпадает с типом поля таб-
лицы
authors. Затем команда SELECT находит запись, у которой поле first_name
совпадает с аргументом, переданным при вызове функции. Команда
SELECT чи-
тает значение поля
last_name этой записи и сохраняет его в переменной l_паmе.
Пример вызова функции с передачей аргумента приведен ниже, в листинге
6.23. Кроме того, передача аргумента пользователем встречается во многих
примерах этой главы.
Листинг 6.22. Использование атрибута %TYPE
CREATEFUNCTIONget_author(text)RETURNStextAS'
DECLARE
‐‐Объявлениепсевдонимадляаргументафункции.
‐‐вкоторомдолжнопередаватьсяимяавтора,
f_nameALIASFOR$1;
‐‐Объявлениепеременной,типкоторойсовпадает
‐‐стипомполяlast_nameтаблицыauthors.
l_nameauthors.last_name l TYPE;
BEGIN
‐‐Найтивтаблицеauthorsфамилиюавтора.
‐‐имякоторогосовпадаетспереданнымаргументом.
‐‐иприсвоитьеепеременнойl_name.
SELECTINTOl_namelast_name
FROMauthors
WHEREfirst_name=f_name;
‐Вернутьимяифамилию,разделенныепробелом,
returnf_name||''''||l_name;
END;
'LANGUAGE'plpgsql';
В листинге 6.23 приведен пример вызова функции get_author().
Листинг 6.23. Результат вызова функции get_author()
booktown=#SELECTget_author('Andrew');
get_author
AndrewBrookIns
(1row)
Атрибут %ROWTYPE
Атрибут %ROWTYPE используется в PL/pgSQL для переменной-записи, имею-
щей одинаковую структуру с записями заданной таблицы. Не путайте атрибут
%ROWTYPE с типом данных RECORD переменная с атрибутом ROWTYPE точно вос-
производит структуру записи конкретной таблицы, а переменная
RECORD не
структурирована и ей можно присвоить запись любой таблицы.
В листинге 6.24 приведена перегруженная версия функции
get_author()
(см. листинг 6.22). Она делает то же, что и прототип, но получает аргумент типа
integer вместо text и ищет автора, сравнивая код с переданным аргументом.
Обратите внимание: в реализации функции используется переменная, объ-
явленная с атрибутом
%ROWTYPE. Возможно, в данном случае применение %ROW‐
Страницы
- « первая
- ‹ предыдущая
- …
- 128
- 129
- 130
- 131
- 132
- …
- следующая ›
- последняя »
