Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fabiapo

Problemas com retorno de registros de uma procedure

Recommended Posts

Pessoal,

 

Estou desenvolvendo a seguinte procedure:

 

CREATE OR REPLACE FUNCTION ffp_pais_cons_valida(IN idef_pais int4, IN dsc_pais text, OUT dt_inclusao text, OUT usuario_inclusao text, OUT dt_alteracao text, OUT usuario_alteracao text, OUT status bpchar, OUT id_usuario_incl int4, OUT id_usuario_alte int4, nom_pais OUT text, idf_pais OUT text) 
RETURNS record AS
$$
DECLARE
reg record;
BEGIN
	IF (idef_pais=0) THEN
		SELECT * INTO reg FROM tfp_pais
		WHERE nm_pais=dsc_pais;	
	ELSE
		SELECT * INTO reg FROM tfp_pais
		WHERE id_pais=idef_pais;
	END IF;

	IF (reg.id_pais<>0) THEN
		idf_pais:=reg.id_pais;
		nom_pais:=reg.nm_pais;
		dt_inclusao:=reg.dt_pais_inclusao;
		id_usuario_incl:=reg.id_usuario_inclusao;
		usuario_inclusao:=reg.nm_usuario_inclusao;
		dt_alteracao:=reg.dt_pais_alteracao;
		id_usuario_alte:=reg.id_usuario_alteracao;
		usuario_alteracao:=reg.nm_usuario_alteracao;
		status:=reg.st_ativo;
	END IF;
END;
$$
LANGUAGE 'plpgsql';

Porém, sempre me retorna um registro, porém, nulo. Exemplo: Row: 1, reg:(,,,,,,)

 

Como estou fazendo uma verificação no meu programa de acordo com a quantidade de linhas retornadas.

Preciso que o postgre apenas me retorne a quantidade de registros caso exista um registro na tabela pesquisada. Se não existir, não retornar a quantidade de registros.

 

Isto ocorre porque estou utilizando INTO? Se sim, o que eu poderia utilizar?

 

Obrigada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

 

Eu não sei o quanto eu vou poder ajudar nessa sua dúvida, mas você pode tentar usar essa função retornando esse reg. Tipo isso daqui:

BEGIN
	IF (idef_pais=0) THEN
		SELECT * INTO reg FROM tfp_pais
		WHERE nm_pais=dsc_pais;	
	ELSE
		SELECT * INTO reg FROM tfp_pais
		WHERE id_pais=idef_pais;
	END IF;

	IF (reg.id_pais<>0) THEN
		idf_pais:=reg.id_pais;
		nom_pais:=reg.nm_pais;
		dt_inclusao:=reg.dt_pais_inclusao;
		id_usuario_incl:=reg.id_usuario_inclusao;
		usuario_inclusao:=reg.nm_usuario_inclusao;
		dt_alteracao:=reg.dt_pais_alteracao;
		id_usuario_alte:=reg.id_usuario_alteracao;
		usuario_alteracao:=reg.nm_usuario_alteracao;
		status:=reg.st_ativo;
	END IF;

return reg;
END;

Eu não testei, mas deve funcionar, pois eu uso uma Procedure semelhante que me retorna um registro e faz uso da variavel NEW, e trabalha da mesma forma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.