Я пытаюсь выполнить функцию PostGreSQL, но получаю ошибку.
Эта функция уже существует в базе данных:
DECLARE
vCur REFCURSOR;
vSql varchar(2000);
vStr varchar(10);
vAux varchar(4000);
vRet bigint;
BEGIN
vRet := '';
-- monta o SELECT dinâmico
vSql := '';
vSql := vSql || 'select SUM(F_PRD_SALDO_PRODUTO(A.CD_EMPRESA, '''|| PI_CD_SALDO ||''', A.CD_PRODUTO, ''' || PI_DT_SALDO::varchar || ''')) ';
vSql := vSql || 'from VR_PRD_PRODEMP A ';
vStr := 'where ';
-- Filtro de empresa
if (PI_CD_EMPRESA IS NOT NULL) then
vSql := vSql || vStr || 'A.CD_EMPRESA IN ( ' || PI_CD_EMPRESA || ' ) ';
vStr := 'and ';
end if;
-- Filtro de produto
if (PI_CD_PRODUTO 0) then
vSql := vSql || vStr || 'A.CD_PRODUTO = ''' || PI_CD_PRODUTO::varchar || ''' ';
vStr := 'and ';
end if;
-- Passo 2: abre e executa o cursor dinâmico usando a cursor variable
open vCur for EXECUTE vSql;
loop
fetch vCur into vAux;
EXIT WHEN NOT FOUND; /* apply on vCur */
vRet := vAux;
end loop;
close vCur;
vRet := coalesce(vRet, '0');
return (vRet)::numeric;
end;
Я пытаюсь выполнить эту команду:
SELECT public.f_dic_sld_prd_produto('301','1',14708,'2019-01-01 00:00:00')
Но он получает следующую ошибку:
ERROR: invalid input syntax for integer: "" SQL state: 22P02 Context: PL/pgSQL function f_dic_sld_prd_produto(text,text,bigint,timestamp without time zone) line 12 at assignment
Примечание. Эта функция используется по умолчанию в системе, используемой нашей компанией. В другой установке, использующей Oracle, эта ошибка не возникает.
Пожалуйста, может кто-нибудь помочь решить это?!
Вы никогда не должны использовать эту функцию, так как она уязвима для SQL-инъекций.





Трудно сказать, в чем проблема, потому что у нас нет ваших таблиц или данных, которые конкретно вызывают ошибку. Отладьте каждую строку и попытайтесь определить источник проблемы.