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 originalCREATE OR REPLACE FUNCTION fpaginartabla(num SMALLINT, tam INTEGER, reg INTEGER)
RETURNS SETOF record AS
$BODY$
DECLARE
datos record;
BEGIN
IF (num = 1) THEN
FOR datos IN
SELECT "alb_ID", "alb_Titulo" FROM "Album" ORDER BY "alb_ID" LIMIT tam OFFSET reg
LOOP
RETURN NEXT datos;
END LOOP;
END IF;
IF (num = 2) THEN
FOR datos IN
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
LOOP
RETURN NEXT datos;
END LOOP;
END IF;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100
ROWS 1000;
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.