首页 > 解决方案 > Postgresql - 在另一个函数中执行函数并在错误时恢复下一个

问题描述

我在 Postgresql 9.3 中有 2 个函数:

CREATE OR REPLACE FUNCTION Function_A(param_id integer, param_name text)
  RETURNS void AS
$BODY$
DECLARE

my_id integer;
my_name text;

BEGIN

    my_id = somefunction(param_id);
    my_name = somefunction(param_name);
    insert into tableA(id, name) values (my_id, my_name);

END

  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION Function_A(integer, text)
  OWNER TO postgres;

CREATE OR REPLACE FUNCTION Function_B(param_id bigint, param_name text)
  RETURNS void AS
$BODY$
DECLARE

BEGIN

    insert into tableC(id, name) values (param_id, param_name);

        perform Function_A(param_id, param_name);


END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION Function_B(bigint, text)
  OWNER TO postgres;

所以,我有问题,当函数 A 返回错误时,函数 B 不会将数据插入表 C。

我想要这样的东西:

如果 Perform Function A 接下来返回错误 resume,那么我的 Function B 可以将数据插入表 C 并继续没有问题。

这可能吗?

标签: postgresqlplpgsql

解决方案


如果没有实际的 SQL 代码,我们实际上无法为您提供太多帮助。如果你想强制一个函数继续而不关心错误,那么你可以使用 SQL 异常语法

EXCEPTION WHEN OTHERS THEN
    -- keep looping
END;

推荐阅读