postgresql嵌套异常可能吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了postgresql嵌套异常可能吗?相关的知识,希望对你有一定的参考价值。

我在函数'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
答案

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

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

以上是关于postgresql嵌套异常可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中修复“嵌套异常是 java.lang.ArrayIndexOutOfBoundsException:索引 2 超出长度 2 的范围” - postgresql 项目

无法保留嵌套片段

使用 SPI 的 PostgreSQL 并行查询可能吗?

有趣的 C++ 代码片段,有啥解释吗? [复制]

使用嵌套命令时可以避免打开 DataReader 异常吗?

为大型 Postgresql 表优化嵌套连接窗口函数