Передача управления
Листинг 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)