Я предпочитаю писать свои функции PostgreSQL таким образом, что у меня всегда есть обработчик исключений по умолчанию, который добавляет имя функции к исключенному броску и повторно бросает его снова.Могу ли я параметризовать SQLSTATE в исключениях в PostgreSQL
Пример:
BEGIN
RAISE exception SQLSTATE '77777' using message = 'Test exception';
EXCEPTION
WHEN others THEN
raise exception
using message = 'error_handling_test: ' || sqlstate
|| '/' || sqlerrm;
END;
В этом случае SQLSTATE 77777 не распространяется дальше и исключение я ловлю позднее по умолчанию SQLSTATE P0001.
Можно добавить SQLSTATE также в сборщик обработчиков исключений, но это, по-видимому, ограничено жестко запрограммированной строкой. То, что я хотел бы получить, это примерно так:
Это не скомпилируется.
Всегда предоставляйте полное определение функции, включая * заголовок. Даже если это тривиально, это облегчает тестирование. И ваша версия Postgres, конечно. –
, если вы можете использовать 9.3, то вы можете использовать дополнительные поля исключений http://www.postgresql.org/docs/9.3/static/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING, чтобы вы не необходимо обработать поле сообщений. –
@PavelStehule - это бесполезно для моего использования, так как мне нужно sqlstate вне Postgres, на Java. – Raqua