Postgresql - выполнить функцию внутри другой функции и возобновить работу при следующей ошибке - PullRequest
0 голосов
/ 11 марта 2019

У меня есть 2 функции в Postgresql 9.3:

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.

Я хочу что-то вроде этого:

Если функция «Выполнение функции A» возвращает ошибку возобновления, то моя функция B может вставить данные в таблицу C и продолжить без проблем.

Возможно ли это?

1 Ответ

1 голос
/ 11 марта 2019

Без реального кода SQL мы не сможем вам так сильно помочь. Если вы хотите принудительно продолжить выполнение функции, не заботясь об ошибках, вы можете использовать синтаксис исключений SQL

EXCEPTION WHEN OTHERS THEN
    -- keep looping
END;
...