возможно ли вложенное исключение postgresql? - PullRequest
0 голосов
/ 30 апреля 2018

Я использую исключение postgrest в функции 'public.main_function'. за исключением «другие», я также использую подфункции для сохранения данных журнала.

но моя подфункция 'public.something_went_wrong_log_creation' может иногда быть ошибкой.

как добавить исключение (вложенное исключение) в исключение "другие" ниже?

    CREATE OR REPLACE FUNCTION public.main_function(request json)
  RETURNS integer AS
$BODY$

BEGIN
    -- statement 1
    -- statement 2
    -- statement 3

    RETURN 1;

EXCEPTION
    -- SOMETHING WENT WRONG
    WHEN others
    THEN
        -- LOG SOMETHING WENT WRONG
        PERFORM public.something_went_wrong_log_creation();

        RETURN 0;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE

    CREATE OR REPLACE FUNCTION public.something_went_wrong_log_creation()
  RETURNS integer AS
$BODY$

BEGIN
    -- statement 1
    -- statement 2
    -- statement 3

    RETURN 1;

EXCEPTION
        -- SOMETHING WENT WRONG
        WHEN others
        THEN
            RETURN 0;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE

1 Ответ

0 голосов
/ 30 апреля 2018

Вы можете использовать субблок и обернуть в него свой код обработки исключений.

CREATE OR REPLACE FUNCTION public.main_function(request json)
  RETURNS integer AS
$BODY$

BEGIN
    -- statement 1
    -- statement 2
    -- statement 3

    RETURN 1;

EXCEPTION
    -- SOMETHING WENT WRONG
    WHEN others
    THEN
        BEGIN
          -- LOG SOMETHING WENT WRONG
          PERFORM public.something_went_wrong_log_creation();

          RETURN 0;
        EXCEPTION
             WHEN others
             THEN
               RETURN -1;
        END;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...