Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

consulta sobre salida dinamica en type del procedimiento o alternativa

Estas en el tema de consulta sobre salida dinamica en type del procedimiento o alternativa en el foro de PostgreSQL en Foros del Web. Hola amigos espero que me puedan ayudar ya que estoy bastante afligido con esto y corro en riesgo mi trabajo :( ..ya que no he ...
  #1 (permalink)  
Antiguo 26/01/2012, 07:15
 
Fecha de Ingreso: enero-2012
Mensajes: 29
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta consulta sobre salida dinamica en type del procedimiento o alternativa

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

Etiquetas: dinamica, end, procedimiento, salida, select, sql, type, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:20.