Hola amigos espero que me puedan ayudar ya que estoy bastante afligido con esto y corro en riesgo mi trabajo :( ..ya que no he podido solucionar este problema.
Tengo un procedimiento el cual tiene un type de salida (create type .... as etc...)
ese type de salida necesito q sea dinamica.
el procedimiento que estoy viendo es el siguiente:
CREATE OR REPLACE FUNCTION domo_paginacion2005(ppagesize character varying, ppagenumber character varying, pcampos character varying, ptabla character varying, porden character varying, pparam character varying, pfiltro character varying)
RETURNS SETOF getpaginacion2005 AS
$BODY$
DECLARE
res getPaginacion2005%rowtype;
psql VARCHAR(1000);
pPageNumber integer;
porden character varying;
pfiltro character varying;
pparam character varying;
BEGIN
pPageNumber := pPageNumber - 1;
IF porden = '' then
porden := 'id_' || ptabla;
END IF;
IF pfiltro = '' then
pfiltro := ' 1=1 ';
ELSE
pfiltro := REPLACE(pfiltro, '"', '''');
END IF;
IF pparam = '' then
pparam := '()';
ELSE
IF pparam = '('')' then
pparam := '('''')';
-- PRINT pfiltro
IF pparam <> '' AND pparam <> '0' then
psql := ' SELECT ' || pcampos || ' FROM ( SELECT ' || pcampos ||
', ROW_NUMBER() OVER (ORDER BY ' || porden || ') AS RowNumber
FROM ' || ptabla || ' WHERE id_'|| ptabla || ' in ' || pparam || ' and ' || pfiltro || ') AS '
|| ptabla || '
WHERE RowNumber BETWEEN ' || pPageSize || ' * ' || pPageNumber || ' || 1 AND '
|| pPageSize || ' * (' || pPageNumber || ' || 1)';
ELSE
psql := ' SELECT ' || pcampos || ' FROM ( SELECT ' || pcampos
|| ', ROW_NUMBER() OVER
(ORDER BY ' || porden || ') AS RowNumber FROM ' || ptabla || ' WHERE ' || pfiltro
|| ' ) AS ' || ptabla || '
WHERE RowNumber BETWEEN ' || pPageSize || ' * ' || pPageNumber || ' || 1 AND '
|| pPageSize || ' * (' || pPageNumber || ' || 1)';
END IF;
END IF;
END IF;
FOR res IN
execute psql
LOOP
RETURN NEXT res;
END LOOP;
RETURN;
end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION domo_paginacion2005(character varying, character varying, character varying, character varying, character varying, character varying, character varying) OWNER TO sa;
La verdad no se si estara bien el procedimiento pero por lo menos guardo..
y el create type es el siguiente:
create type getpaginacion2005 as
(campo text)
MI problema es el campo debe ser dinamica su salida ya que los datos que llegan al procedimiento son dinamicos...supuestamente lo que deberia hacer la salida campo seria la siguiente:
supongamos que llegaron ciertos datos al procedimiento..los cuales los procesa el procedimiento y los envia al type para su salida correspondiente ..pero como son datos dinamicos los que llegan la salida siempre es diferente.....lo q hace en si con un ejemplo lo demostrare...
llegan datos al valor campo q es la salida y si todos los valores que llegan dan como salida 2 campos de salida con sus correspondientes datos...eso seria la salida 2 campos con sus nombres de atributos y sus datos correspondientes eso deberia salir....supongamos que entran otro datos en una consulta nueva al procedimiento y q en total deberian salir 3 campos y el mismo caso anterior..3 campos con sus nombres de atributos y sus datos correspondientes...
ejemplo 1 :
campo 1 campo 2
a 1
b 2
c 3
Suponiendo q esa sea la salida y los nombres de campos son dinamicos
ejemplo 2:
campo1 campo2 campo3
z 0 q
x 9 e
y 8 r
si se fijan llegans datos diferentes al procedimiento (dinamicos) y la salida tambien debiera ser igual no fija..
La pregunta va por ahy como lo debo hacer para que tome la salida como corresponde y salgan los campos que deberian salir? ya sea 1 campo u 1 millon de campos.. si es no va con type si me podrian ayudar a modificar el codigo ya que he intentado de todo y nada
desde ya gracias y ojala me puedan ayudar que me tiene bastante preocupado este asunto