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

Обработка ошибок и исключений

Вызов функций

При вызове функции PL/pgSQL из кода PL/pgSQL имя функции обычно включается в команду SQL SELECT или в команду присваивания. Примеры:

SELECT функция (аргументы):
переменндя: = функция(аргументы):

Подобный способ вызова функций при выборке и присваивании стал стандартным, поскольку любая функция PostgreSQL должна возвращать значение некоторого типа. Ключевое слово PERFORM позволяет вызвать функцию и проигнорировать возвращаемое значение.

Синтаксис вызова функции с ключевым словом PERFORM:

PERFORM функция ('аргументы'):

В листинге 11.50 приведены примеры вызова функции PL/pgSQL с ключевым словом PERFORM и вызова другой функции PL/pgSQL посредством присваивания (в команде SELECT INTO). Функция ship_item() является удобной "оболочкой" для вызова функции add_shipment(). Она получает исходные данные, убеждается в существовании покупателя и книги, а затем передает данные add_shipment().

Листинг 11.50. Использование ключевого слова PERFORM.

CREATE FUNCTION shipjtem (text.text.text) RETURNS integer AS '
DECLARE
--Объявление псевдонимов для аргументов функции.
l_name ALIAS FOR $1: f_name ALIAS FOR $2;
bookjsbn ALIAS FOR $3:
--Объявление переменной для хранения кода книги.
--Переменная используется для проверки переданного кода ISBN.
book_id Integer:
--Объявление переменной для хранения кода покупателя.
--Переменная используется для проверки переданных данных покупателя.
customeMd integer;
BEGIN
--Получить код покупателя при помощи ранее определенной функции.
SELECT INTO customer_id get_customer_id(l_name.f_name);
--Если покупатель не найден, функция get_customerjd
--возвращает -1. В этом случае вернуть – 1 и выйти из функции.
IF customerjd = -1 THEN
RETURN -1:
END IF:
--Получить код книги с заданным кодом ISBN.
SELECT INTO book id book id FROM editions WHERE isbn = book isbn:
--Если данные книги отсутствуют в базе, вернуть -1.
IF NOT FOUND THEN
RETURN -1;
END IF;
--Если книга и покупатель существуют.
--сохранить информацию о поставке в базе.
PERFORM add_shipment(customer_id.bookjsbn);
--Вернуть 1 – признак успешного выполнения функции.
RETURN 1:
END;
' LANGUAGE 'plpgsql':
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.