Em 27 de fevereiro de 2014 10:33, <[email protected]> escreveu: > 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;
Amigão, você deve usuar o JOIN. De uma lida no site http://www.w3schools.com/sql/sql_join.asp para saber a respeito. Vou tentar te ajudar com o SQL abaixo: SELECT triagem.sintomatologia, triagem.orientacao, cid10.diagnostico, cid10.cid INTO record1 FROM triagem INNER JOIN cid10 ON triagem.triagemid = cid10.triagemid AND cid10.servico = p_servico WHERE triagem.servico = p_servico; Tem que mudar o "ID" de relacionamento (triagem.triagemid = cid10.triagemid) conforme suas tabelas. > > 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 -- Renato Luiz Poleti TI | Information Technology .: Poleti Tecnologia :. +55 (12) 9102.0315 [email protected] www.poleti.com.br _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
