2015-04-30 1 views
0

Скажем, у меня есть функция pgplsql (например, buyItem), которая возвращает что-то (например, параметры купленного элемента). В некоторых случаях я хочу указать, что что-то пошло не так, поэтому результат пуст (например, недостаточно денег для покупки нужного предмета). Это обычный результат, я бы не назвал его исключением (и определенно не будет печатать ошибку об этом на сервере db, как это делает raise exception).«Исключить исключение» единственный способ вернуть ошибку из pgplsql в node-postgres?

Итак, вопрос в том, что лучше всего обрабатывать такие случаи?

ответ

1

Ваших два варианта либо вызвать исключение, или возвращать запись как с успехом и информацией об ошибке:

CREATE OR REPLACE FUNCTION buyItem(itemId integer) 
RETURNS RECORD 
AS $$ 
DECLARE 
    result RECORD; 
BEGIN 
    IF itemId > 0 THEN 
    SELECT 'purchase successful', NULL INTO result; 
    ELSE 
    SELECT NULL, 'purchase failed' INTO INTO result; 
    END IF; 
    RETURN result; 
END; 
$$ LANGUAGE plpgsql; 

Есть еще примеры возвращающихся записей здесь: Return multiple fields as a record in PostgreSQL with PL/pgSQL

+0

Ок, спасибо, Дэвид , Поэтому, если моя функция фактически возвращает таблицу, второй вариант становится непригодным. –

+0

Если вы возвращаете таблицу, вы также можете рассмотреть возможность добавления дополнительного столбца 'error'. Но я не считаю, что можно встраивать внутри записей или строк, поэтому, если вы не хотите делать что-то вроде преобразования его в массив (и возвращать что-то вроде '(текст ошибки, результаты buyItemResult [])'), вы отсутствуете удачи. –

Смежные вопросы