postgresql嵌套异常可能吗?

问题描述 投票:1回答:1

我在函数'public.main_function'中使用postgrest异常。在'others'例外,我还使用子函数来保存我的日志数据。

但我的子函数'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
postgresql exception psql
1个回答
2
投票

您可以使用子块并将异常处理代码包装在其中。

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
© www.soinside.com 2019 - 2024. All rights reserved.