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

Responder a