Обработка ошибок и исключений
Вызов функций
При вызове функции 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':