Tenho uma Procedure que realiza os “inserts” e “updates” nas tabelas. A necessidade de criá-la foi para tentar centralizar todas as funções de verificação antes de inserir ou atualizar registros. Hoje surgiu a necessidade de retornar o valor do campo “ID” da tabela para que minha aplicação possa localizar o registro e executar outros procedimentos.
Stored Procedure:
SET TERM ^ ; CREATE OR ALTER procedure sp_insupd ( iaction varchar(3), iusuario varchar(20), iip varchar(15), imodulo varchar(30), ifieldsvalues varchar(2000), iwhere varchar(1000), idesclogs varchar(200)) returns ( oid integer) as declare variable vdesc varchar(10000); begin if (iaction = 'ins') then begin vdesc = idesclogs; /*** o erro está na linha abaixo ***/ execute statement 'insert into '||:imodulo||' '||:ifieldsvalues||' returning ID into '||:oid||';'; end else if (iaction = 'upd') then begin execute statement 'select '||:idesclogs||' from '||:imodulo||' where '||:iwhere into :vdesc; execute statement 'execute procedure SP_CREATE_AUDIT('''||:imodulo||''');'; execute statement 'update '||:imodulo||' set '||:ifieldsvalues||' where '||:iwhere||';'; end insert into LOGS(USUARIO, IP, MODULO, TIPO, DESCRICAO) values ( :iusuario, :iip, :imodulo, (case :iaction when 'ins' then 1 when 'upd' then 2 end), :vdesc); end^ SET TERM ; ^
O erro na linha mencionada está ocorrendo por erro de sintaxe. A Procedure é compilada normalmente, ou seja, o erro não acontece na compilação, pois a linha em questão é executada através do “execute statement”. Quando não havia necessidade de retornar o valor do campo “ID”, a Procedure funcionava normalmente com a linha desta maneira:
... execute statement 'insert into '||:imodulo||' '||:ifieldsvalues||';'; ...
Qual seria a forma correta para que o valor do campo “ID” fosse armazenado na variável “OID”?