Em 27/02/2014 09:25, Matheus de Oliveira escreveu:
2014-02-27 0:02 GMT-03:00 <[email protected]>:
Senhores, estou trabalhando em um sistema onde terei que fazer
várias consultas em varias tabelas dependendo de condições
específicas.
Para evitar idas e vindas, pensei em fazer uma função de única
linha, como neste exemplo:
CREATE FUNCTION test_record(p1, p2, p3) RETURNS RECORD AS $$
DECLARE
ret RECORD;
ret1 RECORD;
BEGIN
SELECT TRUE, 1 as um, 2 as dois, 3 as tres INTO ret;
SELECT FALSE as boleano, 4 as quatro INTO ret1;
RETURN ret + ret1;
END;$$ LANGUAGE plpgsql;
O seu exemplo não faz muito sentido, por favor, sempre informe melhor
o que você quer. Estou deduzindo que queiras retornar várias linhas,
nesse caso o seu exemplo deveria ser adaptado para:
CREATE FUNCTION test_record(p1, p2, p3)
RETURNS SETOF RECORD /* SETOF faz com que seja possivel retornar
varias linhas */
AS $$
DECLARE
ret RECORD; /* Não precisa de duas variáveis, ao menos que irás
cruzar os dados */
BEGIN
SELECT TRUE, 1 as um, 2 as dois, 3 as tres INTO ret;
RETURN NEXT ret; /* Retorna uma linha com o valor atual de ret
*/
SELECT FALSE as boleano, 4 as quatro INTO ret;
RETURN NEXT ret; /* Retorna a segunda linha com o valor atual
de ret */
END;$$ LANGUAGE plpgsql;
O problema de usar SETOF RECORD é que na chamada você tem que definir
os termos:
SELECT * FROM test_record(...) AS (b bool, um int, dois int, tres
int);
O que é ruim, por isso eu recomendaria usar RETURNS TABLE ou SETOF de
um tipo definido.
Atenciosamente,--
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres [1]
Links:
------
[1] http://www.dextra.com.br/postgres/
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Não, meu caro. Eu escrevi: uma função DE UNICA LINHA.
A questão é a seguinte:
tendo varias tabelas, como mencionei anteriormente, quero retornar um
unico registro:
record1 : SELECT sintomatologia, orientacao INTO record1 from triagem
where servico = p_servico;
record2 : SELECT diagnostico, cid INTO record2 from cid10 where servico
= p_servico;
depois de todas as seleções, retornar todos os records em um unico
registro.
return record1.sintomatologia, record1.orientacao, record2.diagnostico,
record2.cid;
Att Carlos
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral