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

Postgre S.O.S : campo dinamico en type en la salida...

Estas en el tema de Postgre S.O.S : campo dinamico en type en la salida... en el foro de PostgreSQL en Foros del Web. Bueno muchachos ojala alguien me pudiera ayudar que llevo varios dias intentando y buscando y nada..lo que pasa es que tengo un procedimiento el cual ...
  #1 (permalink)  
Antiguo 17/01/2012, 14:20
 
Fecha de Ingreso: enero-2012
Mensajes: 29
Antigüedad: 7 años, 10 meses
Puntos: 0
Postgre S.O.S : campo dinamico en type en la salida...

Bueno muchachos ojala alguien me pudiera ayudar que llevo varios dias intentando y buscando y nada..lo que pasa es que tengo un procedimiento el cual tiene campos dinamicos..el procedimeinto en si funciona perfecto..el problema es la salida el "type"...ya que la salida debiera ser campo dinamico y no se como hacerlo pondre parte del codigo para q me entiendan mejor..eso si estoy trabajando en php..

codigo php:

$Datos = LocalQueryHandler("DOMO_getLookupData", $pParams, "");


$i = 0;

if ($Datos) {

foreach ($Datos as $Result) {

$param = $Result[$id_tabla] . "/" . $pasaValor;

$Value[$i] = $Result;

$Value[$i]['nombre_atributo'] = $campo_look;

$Value[$i]['PasaValor'] = $param;

$Value[$i]['SigCombo'] = "\"" . $sig_combo . "\"";

$i++;



$Datos = los trae perfecto y $pasaValor tambien los trae bien...

el problema esta en = $Result[$id_tabla] ...es aqui donde no trae nada de nada..aqui es donde deberia mostrar los datos del procedimeinto en si..mas singular el id_tabla que trae el procedimiento..pero este id_tabla es dinamico y no se como hacer para q la salida del procedimiento sea dinamico..si los datos los pongo en duro funciona .pero no es lo que busco...alguien que me pueda ayudar por favor

aqui esta el procedimiento:

CREATE OR REPLACE FUNCTION domo_getlookupdata(pstrtabla character varying, pstrcampolookup character varying, pintidregistro character varying)
RETURNS SETOF getlookupdata AS
$BODY$
DECLARE
res getlookupdata%rowtype;
pintIdRegistro VARCHAR(100) = 0;
vsql VARCHAR(4000);

BEGIN

/*****si se fijan el procedimiento ya toma campos dinamicos *****o sea puede ser de cualquier tabla los datos*****////


IF pintIdRegistro <> 0 then
vsql := 'SELECT id_' || pstrTabla || ' , '
|| pstrCampoLookup || ' FROM ' || pstrTabla
|| ' WHERE id_'||pstrTabla||' = ' || pintIdRegistro :: VARCHAR(30)
|| ' ORDER BY ' || pstrCampoLookup || ' ';



ELSE
vsql := 'SELECT id_' || pstrTabla || ' , '
|| pstrCampoLookup || ' FROM ' || pstrTabla
|| ' ORDER BY ' || pstrCampoLookup || ' ';

END IF;
FOR res IN

execute vsql
LOOP
RETURN NEXT res;
END LOOP;
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION domo_getlookupdata(character varying, character varying, character varying) OWNER TO sa;


y este es el Type:

Create type getlookupdata as
(id_tabla text,
combo text)

id_tabla es el problema como hacerlo dinamica su salida????
  #2 (permalink)  
Antiguo 18/01/2012, 06:16
 
Fecha de Ingreso: enero-2012
Mensajes: 29
Antigüedad: 7 años, 10 meses
Puntos: 0
Respuesta: Postgre S.O.S : campo dinamico en type en la salida...

Bueno muchachos ojala alguien me pudiera ayudar que llevo varios dias intentando y buscando y nada..lo que pasa es que tengo un procedimiento el cual tiene campos dinamicos..el procedimeinto en si funciona perfecto..el problema es la salida el "type"...ya que la salida debiera ser campo dinamico y no se como hacerlo pondre parte del codigo para q me entiendan mejor..eso si estoy trabajando en php..

codigo php:

$Datos = LocalQueryHandler("DOMO_getLookupData", $pParams, "");


$i = 0;

if ($Datos) {

foreach ($Datos as $Result) {

$param = $Result[$id_tabla] . "/" . $pasaValor;

$Value[$i] = $Result;

$Value[$i]['nombre_atributo'] = $campo_look;

$Value[$i]['PasaValor'] = $param;

$Value[$i]['SigCombo'] = "\"" . $sig_combo . "\"";

$i++;



$Datos = los trae perfecto y $pasaValor tambien los trae bien...

el problema esta en = $Result[$id_tabla] ...es aqui donde no trae nada de nada..aqui es donde deberia mostrar los datos del procedimeinto en si..mas singular el id_tabla que trae el procedimiento..pero este id_tabla es dinamico y no se como hacer para q la salida del procedimiento sea dinamico..si los datos los pongo en duro funciona .pero no es lo que busco...alguien que me pueda ayudar por favor

aqui esta el procedimiento:

CREATE OR REPLACE FUNCTION domo_getlookupdata(pstrtabla character varying, pstrcampolookup character varying, pintidregistro character varying)
RETURNS SETOF getlookupdata AS
$BODY$
DECLARE
res getlookupdata%rowtype;
pintIdRegistro VARCHAR(100) = 0;
vsql VARCHAR(4000);

BEGIN

/*****si se fijan el procedimiento ya toma campos dinamicos *****o sea puede ser de cualquier tabla los datos*****////


IF pintIdRegistro <> 0 then
vsql := 'SELECT id_' || pstrTabla || ' , '
|| pstrCampoLookup || ' FROM ' || pstrTabla
|| ' WHERE id_'||pstrTabla||' = ' || pintIdRegistro :: VARCHAR(30)
|| ' ORDER BY ' || pstrCampoLookup || ' ';



ELSE
vsql := 'SELECT id_' || pstrTabla || ' , '
|| pstrCampoLookup || ' FROM ' || pstrTabla
|| ' ORDER BY ' || pstrCampoLookup || ' ';

END IF;
FOR res IN

execute vsql
LOOP
RETURN NEXT res;
END LOOP;
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION domo_getlookupdata(character varying, character varying, character varying) OWNER TO sa;


y este es el Type:

Create type getlookupdata as
(id_tabla text,
combo text)

id_tabla es el problema como hacerlo dinamica su salida????
  #3 (permalink)  
Antiguo 19/01/2012, 11:13
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 11 años, 1 mes
Puntos: 58
Respuesta: Postgre S.O.S : campo dinamico en type en la salida...

Por campo dinamico te refieres a que el type debe de cambiar para anexar un nuevo campo de retorno?

Si es asi, creo que no se puede, por que el type espera los campos declarados, lo que puedes hacer es cambiar el retorno para que te regrese los campos en las variables que tu declaraste
  #4 (permalink)  
Antiguo 19/01/2012, 11:16
 
Fecha de Ingreso: enero-2012
Mensajes: 29
Antigüedad: 7 años, 10 meses
Puntos: 0
Respuesta: Postgre S.O.S : campo dinamico en type en la salida...

algo asi...estuve analizando el asunto al parecer no se deberia crear un type si no q a tavres de un record se podria..pero no se me ocurre como :(...si me podrias ayudar con modificar el procedimiento te lo agradeceria montones que llevo varios dias en esto y estoy casi a punto de la fecha de entrega...
desde ya se agradece
  #5 (permalink)  
Antiguo 19/01/2012, 12:21
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 11 años, 1 mes
Puntos: 58
Respuesta: Postgre S.O.S : campo dinamico en type en la salida...

Revisa el link: http://www.forosdelweb.com/f99/neces...9/#post4096686 te puse un ejemplo, haber si te sirve.

Etiquetas: dinamico, end, postgre, procedimiento, 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 12:35.