Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde!
Estou com um problema no retorno de uma function que desenvolvi.
Primeiro tive que listar todos os registros de uma tabela.
Em seguida, dependendo de uma das colunas dos registros retornados, tive que fazer um segundo sql para buscar outros dados em outra tabela. Se o retorno for 1, tenho que buscar mais dados na tabela 1, se o retorno for 2, busco na tabela 2 e assim por diante.
Só que no sql de uma destas tabelas ele pode cair numa situação que não pode ser exibida. Assim, eu gostaria de excluir este registro da consulta ou pular para o próximo registro do primeiro sql, mas não consigo. A function me retorna um registro em branco, o que não pode acontecer.
Segue um exemplo do meu código:
CREATE OR REPLACE FUNCTION funcao_x(...)
RETURNS SETOF record AS
$BODY$
DECLARE
reg record;
reg_vi record;
arg_ac text DEFAULT '';
arg_si text;
sql_ac text;
sql_vi text;sql_ac:='SELECT A.a, C.c, A.b FROM tabela WHERE ...';
FOR reg IN
EXECUTE sql_ac
LOOP
IF (reg.num!='') THEN
IF (reg.coluna1='A' OR reg.coluna1='B') THEN
sql_vi:='SELECT A.a FROM tabela2 WHERE ...';
EXECUTE sql_vi INTO reg_vi;
IF (found) THEN
/* RETORNA REGISTROS DO SEGUNDO SQL*/
ELSE
/* AQUI ESTÁ O PROBLEMA, POIS RETORNA UM REGISTRO EM BRANCO*/
END IF;
END IF;
ELSE
/*RETORNA REGISTROS DO PRIMEIRO SQL*/
END IF;
RETURN NEXT;
END LOOP;
...
Alguém sabe como eu posso chamar o próximo registro do primeiro sql ou pelo menos não deixar o registro em branco ser exibido no retorno?
Obrigada!
Carregando comentários...