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

Передача управления

Листинг 11.40. Команда IF/THEN/ELSE/IF.

CREATE FUNCTION books_by_subject (text) RETURNS text AS '
DECLARE
--Объявление псевдонима для аргумента, содержащего либо
--строку all. либо тему.
sub_tnie ALIAS FOR $1;
--Объявление целочисленной переменной для хранения кода темы
– и текстовой переменной для хранения списка найденных книг.
– Текстовая переменная инициализируется пустой строкой.
suD_id integer:
found_text text:
BEGIN
--Получить код темы, описание которой передано в аргументе.
SELECT INTO subjd id FROM subjects WHERE subject = sub_title:
--Проверить, запросил ли пользователь информацию обо всех темах
– (строка all). В этом случае вызвать функцию extract_all_titles()
– и вернуть полученную текстовую переменную.
IF sub_t1tle = ' 'all'' THEN
found_text extract_all_titles(); RETURN found text:
--Если в аргументе НЕ БЫЛА передана строка "all", проверить.
--входит ли код темы в интервал допустимых значений.
--Если это так, вызвать функцию extract_title() с кодом темы
--и присвоить результат переменной found_text.
ELSE IF subjd >= 0 THEN
found_text: – extract_title(sub_id):
RETURN "\n" || sub_title || ":\n" | found_text;
--Если код темы равен NULL, вернуть сообщение о том. что
--заданная тема не найдена.
ELSE IF subjd IS NULL THEN
RETURN "Subject not found.";
END IF:
END IF;
END IF;
RETURN "An error occurred..";
END;
' LANGUAGE 'plpgsql':

В листинге 11.41 сначала приведен результат вызова функции books_by_subject() с аргументом аll (признак того, что пользователь хочет получить список книг по всем темам). Затем следуют результаты, полученные при вызове функции с аргументом Computers (получение списка книг, посвященных компьютерам).

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

booktown=# SELECT books_by_subject('al1');
books_by_subject
Arts:
Dynamic Anatomy
Business:
Children's Books:
The Cat in the Hat
Bartholomew and the Oobleck
Franklin in the Dark
Goodnight Moon
[…]
Science:
Science Fiction:
Dune
2001: A Space Odyssey
(1 row)

booktown=# SELECT books_by_subject('Computers');
books by_subject
Computers:
Learning Python
Perl Cookbook
Practical PostgreSQL
Programming Python
(1 row)
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.