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

Responder a