Em 27/02/14, Carlos Antônio Pereira
(VidaUTI)<[email protected]> escreveu:
>>Então, como já foi dito antes, estude os diversos tipos de JOIN que,
>>pela sua explicação, me parece que você desconhece, e faça uma única
>>consulta.
>
> Osvaldo,
>
> Em um contexto de junção eu faria isso:
>
> SELECT
>     s.*,  -- Registros do servico
>     r.*,  -- Registros da Remocao
>     st.ocorrencia AS sintomatologia, -- sintomatologia
>     o.ocorrencia AS orientacao -- orientacao
>
> FROM servico s
>
>   -- Liga remocao quando existir
>   LEFT JOIN servico_agenda_remocao r
>    ON (s.num_servico = r.num_servico)
>
>   --Liga orientacao quando existir
>   LEFT JOIN servico_ocorrencias AS o
>    ON (s.num_servico = o.num_servico AND o.referencia = '00')
>
>
>   --Liga sintomatologia quando existir
>   LEFT JOIN servico_ocorrencias AS st
>    ON (s.num_servico = st.num_servico AND st.referencia = '01')
>
>
>   --Liga quadro clinico quando existir
>   LEFT JOIN servico_ocorrencias AS qc
>    ON (s.num_servico = qc.num_servico AND qc.referencia = '04')
>
> WHERE s.num_servico = 227571
>
>
> Isso resolve.
> Minha intenção com uma função seria  avaliar a classificação do serviço
> (Atendimento ou Remoção)
> e buscar apenas o que for pertinente:
>
> Atendimento:
> Possui 1 registro em serviço, 1 registro de sintomatologia e 1 registro de
> orientacao
> Remocao:
> Possui 1 registro em serviço, 1 registro em servico_remocao e 1 registro de
>
> quadro clinico
>
>
> Finalmente, o cerne da minha pergunta (vide título) seria da possibilidade
> de concatenar variaveis do tipo record e retorná-las.
> Nem entrei no contexto do negócio porque isso é irrelevante pelo texto que
> submeti à lista.
>
> SELECT 1 as um, 2 as dois INTO rec1       // Um retorno de única linha
> SELECT 3 as tres, 4 as quatro INTO rec2  // Um retorno de única linha
>
> concatenação rec1 X rec2:
>
> um dois tres quatro
> 1       2     3       4
>


Nunca usei algo do tipo mas, pelo que entendo da documentação [1],
isto não seria possível em uma função PL/pgSQL.

O que você poderia tentar é construir diferentes SELECTs com
diferentes RETURNs mas, neste caso, creio que você teria problemas nas
chamadas da função (quando você retorna um RECORD você precisa
especificar na chamada a lista de campos, com respectivos tipos, que
está(ão) sendo retornado(s)).

Osvaldo

[1] 
http://www.postgresql.org/docs/current/interactive/plpgsql-declarations.html#PLPGSQL-DECLARATION-RECORDS
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a