Boa tarde gente.
Tenho essa function funcSalvarEndereco que crieu em postgreeSQL.
Queria saber se algum de vocês poderiam me enviar um exemplo que vocês tenham usando java, para execução de function com passagem de parametros de entrada e retorno de saida da function usando conexao JDBC e java.
CREATE OR REPLACE FUNCTION funcSalvarEndereco(in_sTipoGravacao character varying(1),
in_idendereco integer,
in_idusuario integer,
in_sidentend character varying(55),
in_snomedest character varying(110),
in_scep character varying(10),
in_sendereco character varying(100),
in_snumero character varying(8),
in_scomplemento character varying(100),
in_spontoreferencia character varying(60),
in_scidade character varying(50),
in_sbairro character varying(50),
in_sidestado character varying(3),
in_spais character varying(50),
in_fendprincipal boolean)
RETURNS character varying(100) AS $$
DECLARE decl_qtd integer;
BEGIN
if (in_sTipoGravacao = 'i') then
/*verifica se descrição de identificação de endereço digitafa já existe p/ impedir duplicar do registro*/
decl_qtd = 0;
SELECT COUNT(*) INTO decl_qtd
FROM endereco
WHERE idusuario = in_idusuario
AND sidentend = TRIM(in_sidentend);
if (decl_qtd > 0) then
return CONCAT('Essa descrição de identificação de Endereço (',in_sidentend,') já existe. Favor! Digite outra');
end if;
else /*esta editando*/
/*verifica se identificação do endereço editata ja
existe para outro registro diferente do atual*/
decl_qtd = 0;
SELECT COUNT(*) INTO decl_qtd
FROM endereco
WHERE idusuario = in_idusuario
AND sidentend = TRIM(in_sidentend)
AND idendereco <> in_idendereco;
if (decl_qtd > 0) then
return CONCAT('Essa descrição de identificação de Endereço (',in_sidentend,') já existe. Favor! Digite outra');
end if;
end if;
/*se registro atual foi cadastrado como endereço principal
seta todos os endereços existentes false, sem endereço principal.
para deixar livre inserção de um unico registro como principal */
if in_fendprincipal = true then
UPDATE endereco SET
fendprincipal = false
WHERE idusuario = in_idusuario;
else
/*se registro atual nao foi cadastrado como endereço principal entao
se nao tem nenhum registro cadastrado como principal,
o primeiro registro que entra, entra como principal*/
decl_qtd = 0;
SELECT COUNT(*) INTO decl_qtd
FROM endereco
WHERE idusuario = in_idusuario
AND fendprincipal = true;
if not(decl_qtd > 0) then
in_fendprincipal := true;
end if;
end if;
if (in_sTipoGravacao = 'i') then /*esta inserindo*/
INSERT INTO endereco
(idusuario,sidentend,snomedest,scep,sendereco,snumero,scomplemento,spontoreferencia,scidade,
sbairro,sidestado,spais,fendprincipal,dcadastro)
VALUES(
in_idusuario,in_sidentend,in_snomedest,in_scep,in_sendereco,in_snumero,in_scomplemento,in_spontoreferencia,in_scidade,
in_sbairro,in_sidestado,in_spais,in_fendprincipal,CURRENT_DATE);
else /*esta editando*/
update endereco set
sidentend = in_sidentend,
snomedest = in_snomedest,
scep = in_scep,
sendereco = in_sendereco,
snumero = in_snumero,
scomplemento = in_scomplemento,
spontoreferencia = in_spontoreferencia,
scidade = in_scidade,
sbairro = in_sbairro,
sidestado = in_sidestado,
spais = in_spais,
fendprincipal = in_fendprincipal,
dcadastro = CURRENT_DATE
WHERE (idendereco = in_idendereco AND idusuario = in_idusuario);
end if;
RETURN 'sucesso';
END;
$$ LANGUAGE plpgsql;
para executar a procedure diretamente pelo postgree eu executo como abaixo,
mais não sei fazer isso passar os paramentros de entrada da função, executar a função e receber o valor do return da saida da função via comandos feitos em uma classe java
select funcSalvarEndereco (
'e',
10,
70,
'Casa Principal de Tia Basoca',
'Basoca Ferreira da Hora',
'66208-000',
'Rua nova',
'10',
'',
'Póximo a Oficina de Maluquete',
'São Paulo',
'Boa Esperança',
'MA',
'Brasil',
true )