multiples consulta en una función

multiples consulta en una función

buenas, estoy tratando de obtener múltiples consultas de una función, en sql server es fácil, en un procedimiento almacenado pones los select que deseas y te aparecen todas las consultas por separado al mismo tiempo al momento de ejecutar el procedimiento, necesito la misma funcionalidad en postgres pero no he podido hasta el momento :S. alguien me podría dar una mano al respecto

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Re: multiples consulta en una función

Hola subzero1331.

Nunca he trabajado con SQL Server, de manera que desconozco la funcionalidad de la que hablas. Cuando dices:

en un procedimiento almacenado pones los select que deseas y te aparecen todas las consultas por separado al mismo tiempo al momento de ejecutar el procedimiento

¿Te refieres a que si pongo 2 consultas a tablas diferentes (trayendo datos distintos en cada una), cuando ejecuto el procedimiento, lanzará las 2 de manera secuencial, devolviendo sus respectivos resultados, que recibirá quien ejecute el procedimiento almacenado, como si hubiese ejecutado una sola consulta? Es decir:

Cabecera del procedimiento
   select id from A;
   select id, descripcion from B;
Pie del procedimiento

¿Recibiré?:

1
2
1, descripion 1
2, descripion 2

Si es así, no conozco una "equivalencia literal" de esa funcionalidad en PostgreSQL. Lo que sí puedes hacer es, unificar las consultas en una sola utilizando UNION, lo que implica que tendrías que "arreglarla" para que devolviesen el mismo número de parámetros y del mismo tipo.

O si, por el contrario, es preciso que sea un procedimiento almacenado ya que existe "codigo que no podría ir directamente en SQL": condiciones para lanzar una u otra consulta, etc. Podrías emplear el siguiente "esqueleto de procedimiento almacenado":

CREATE TABLE informacion_a (
  id integer,
  codigo character varying(10),
  descripcion character varying(255)
)

CREATE TABLE informacion_b (
  id integer,
  valor double precision,
  nombre character varying(255)
)

CREATE OR REPLACE FUNCTION doble_consulta() RETURNS TABLE(id integer, descripcion character varying) AS
$BODY$
BEGIN    
    RETURN QUERY SELECT a.id, a.descripcion FROM informacion_a a WHERE a.id > 2;       
    RETURN QUERY SELECT b.id, b.nombre FROM informacion_b b WHERE b.id > 2;
END;
$BODY$
LANGUAGE plpgsql;

select * from doble_consulta();

Pudiendo añadir cualquier código plpgsql que necesites.

Un saludo.