Ver Mensaje Individual
  #4 (permalink)  
Antiguo 25/11/2009, 12:07
Avatar de xdrtas
xdrtas
 
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 97
Antigüedad: 15 años, 10 meses
Puntos: 13
Respuesta: Procedimiento con campos de select variables

Hola webness, mira, no entiendo muy bien, pero por qué no usas SETOF record en vez de un tipo hecho por tí? El Record se construye automáticamente con los campos que tenga la consulta. Si tu primera consulta tiene A,B,C, así será el record devuelto, si la segunda consulta es A,D,E,F así será tu record para esa segunda consulta.

Un ejemplo de una consulta que tengo hecha para una página web que estoy haciendo:

Código sql:
Ver original
  1. CREATE OR REPLACE FUNCTION fpaginartabla(num SMALLINT, tam INTEGER, reg INTEGER)
  2.   RETURNS SETOF record AS
  3. $BODY$
  4.         DECLARE
  5.             datos record;
  6.         BEGIN
  7.             IF (num = 1) THEN
  8.                 FOR datos IN
  9.                     SELECT "alb_ID", "alb_Titulo" FROM "Album" ORDER BY "alb_ID" LIMIT tam OFFSET reg
  10.                 LOOP
  11.                     RETURN NEXT datos;
  12.                 END LOOP;
  13.             END IF;
  14.             IF (num = 2) THEN
  15.                 FOR datos IN
  16.                     SELECT "usr_ID", ("usr_Nombre" || ' ' || "usr_Apellido")::VARCHAR AS "Nombre", "usr_Alias" FROM "Usuario" WHERE "usr_Nivel" < 3 ORDER BY "usr_ID" LIMIT tam OFFSET reg
  17.                 LOOP
  18.                     RETURN NEXT datos;
  19.                 END LOOP;
  20.             END IF;
  21.         END;
  22.     $BODY$
  23.   LANGUAGE 'plpgsql' VOLATILE
  24.   COST 100
  25.   ROWS 1000;
  26. ALTER FUNCTION fpaginartabla(SMALLINT, INTEGER, INTEGER) OWNER TO postgres;

Si te fijas, la primera consulta me devuelve dos parámetros y la segunda consulta me devuelve tres, y no tengo que agregar comodines.

O quieres hacer otra cosa?

Espero tu respuesta, saludos.