Обьяснить почему ошибка при вызове процедуры в Postgres

500 руб. за проект
03 августа 2021, 19:17 • 3 отклика • 45 просмотров
Обьяснить почему ошибка при вызове процедуры в Postgres, можно подключится через team viewer .


Процедура

CREATE OR REPLACE PROCEDURE tmd.etl_sp_wf_param_add(
_wf_id integer,
_param_name character varying,
_param_value character varying,
_param_type character varying)
LANGUAGE 'plpgsql'
AS $BODY$
DECLARE
_wf_id1 integer;
_param_id integer;
_param_id1 integer;
BEGIN

--проверка наличия потока
select cast(coalesce(wf_id,0) as int) into _wf_id1
from tmd.etl_wf
where wf_id = _wf_id;

--проверка существующего потока
if _wf_id1 is null then
RAISE EXCEPTION 'Unknown name of Workflow %', _wf_id;
END IF;

Select param_id into _param_id1
from tmd.etl_wf_param
where wf_id = _wf_id
and param_name = _param_name;

--проверка на существование параметра по имени для потока
IF _param_id1 is not null then
RAISE EXCEPTION 'Already exists param % for Workflow ID, wf_id = %', _param_name, _wf_id;
END IF;

Select into _param_id
COALESCE(NULLIF(max(param_id), ''),0) from tmd.etl_wf_param where wf_id = _wf_id;

Insert into tmd.etl_wf_param (wf_id, param_id, param_name, param_value, param_type)
values(_wf_id, _param_id, _param_name, _param_value,_param_type);

EXCEPTION
WHEN OTHERS THEN
RAISE NOTICE 'sqlstate = %, sqlerm = %', sqlstate, sqlerrm;
ROLLBACK;
END;
$BODY$;

Вызов процедуры
DO $$
DECLARE
_wf_id integer :=1;
_param_name varchar(50) := 'write_to_file';
_param_value varchar := 'yes';
_param_type varchar(50) := 'const';
BEGIN
CALL tmd.etl_sp_wf_param_add(_wf_id, _param_name, _param_value, _param_type);
END $$

Ошибка
NOTICE: sqlstate = 22P02, sqlerm = invalid input syntax for integer: ""
DO

При этом предварительно таблица tmd.etl_wf была заполнена одной строкой с wf_id = 1