Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML. Токмаков Г.П. - 142 стр.

UptoLike

Составители: 

142
сок всех книг по теме, код которой был передан в аргументе функции. Работа
функции завершается возвращением переменной
text_output.
Листинг 6.39. Использование цикла FOR с атрибутом %ROWTYPE
CREATEFUNCTIONextract_title(integer)RETURNStextAS'
DECLARE
‐‐Объявлениепсевдонимадляаргументафункции.
sub_idALIASFOR$1;
‐‐Объявлениепеременнойдляхраненияназванийкниг.
‐‐Переменнаяинициализируетсясимволомновойстроки,
textoutputtext:=''\n'';
‐‐Обьявлениепеременнойдляхранениязаписей
‐‐таблицыbooks.
row_databooks%ROWTYPE;
BEGIN
‐‐Переборрезультатовзапроса.
FORrow_dataINSELECT*FROMbooks
WHEREsubject_id=sub_idORDERBYtitleLOOP
‐‐Присоединитьназваниекнигикпеременнойtext_output.
text_output:=text_output||row_data.title||"\n";
ENDLOOP;
‐‐Вернутьсписоккниг.
RETURNtext_output;
END;
'LANGUAGE'plpgsql';
В листинге 6.40 показан результат вызова функции extract_title() с ар-
гументом
2. В таблице subjects этот код соответствует теме «Children's Books»
(книги для детей).
Листинг 6.40. Результат выполнения функции extract_title()
booktown=#SELECTextract_title(2);
extract_title
BartholomewandtheOobleck
FranklinintheDark
GoodnightMoon
TheCatintheHat
(1row)
Переменная row_data объявляется с атрибутом %ROWTYPE no отношению к
таблице
books, поскольку она будет использоваться только для хранения запи-
сей из таблицы
books. С таким же успехом можно было объявить row_data с ти-
пом
RECORD:
row_dataRECORD;
Но это следует делать только в том случае, если в переменной предполага-
ется хранить записи из нескольких таблиц.
Функция
extract_title() возвращает одинаковые результаты как при объ-
явлении переменной с типом
RECORD, так и с атрибутом %ROWTYPE.
6.1.8. О
БРАБОТКА ОШИБОК И ИСКЛЮЧЕНИЙ
Команда
RAISE предназначена для инициирования ошибок и исключений в
функциях
PL/pgSQL. Она передает заданную информацию механизму PostgreSQL