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

consulta: nombre de salida del type del procedimiento no sea fijo

Estas en el tema de consulta: nombre de salida del type del procedimiento no sea fijo en el foro de PostgreSQL en Foros del Web. Hola muchachos mi consulta es la siguiente: esta es mi salida de type: create type ejemplo as (id_tabla text, nombre text) en este create salen ...
  #1 (permalink)  
Antiguo 20/01/2012, 13:38
 
Fecha de Ingreso: enero-2012
Mensajes: 29
Antigüedad: 12 años, 3 meses
Puntos: 0
consulta: nombre de salida del type del procedimiento no sea fijo

Hola muchachos mi consulta es la siguiente:

esta es mi salida de type:

create type ejemplo as
(id_tabla text,
nombre text)

en este create salen valores fijos o sea en el codigo en mi caso php para que tomen los valores deben ser los mismos, me explico...

en php si sale lo siguiente

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

id_tabla automaticamente toma los valores del procedimiento o el type en cuestion..

pero que pasa si en php fuera asi:

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

$campo_look viene de otro procedimiento y esta bien, trae el nombre de un atributo en particular...en este ejemplo: nombre_pelicula.....pero se necesita que tome los valores del atributo en cuestion el $Value[$i]['nombre_atributo']...para que eso pase deberia tener el mismo nombre lo que trae $campo_look y el nombre del type que esta mas arriba..o sea seria asi..


create type ejemplo as
(id_tabla text,
nombre_pelicula text)

ahy funciona perfecto...pero si hago lo mismo con tro atributo tendria que cambiar nuevamente uno de los tipos....

entonces como lo puedo hacer para no estar cambiando a cada rato eso por q el sistema funciona con varios de estos tipos..


este es el codigo en php:

switch ($pIntIdTipoAtt) {

case "13": //LOOKUP



unset($Datos);

$Datos = LocalQueryHandler("DOMO_getLookup", $pIntIdAttLookup, "");


if ($Datos) {

$filtro = $Datos[0]['filtro'];

$id_atributo_filtro = $Datos[0]['id_atributo_filtro'];

$id_domo_atributolookup = $Datos[0]['id_domo_atributolookup'];

$id_domo_atributo = $Datos[0]['id_domo_atributo'];

$id_tabla = "id_" . $Datos[0]['nombre_tabla'];

$id_domo_tabla = $Datos[0]['id_domo_tabla'];

$campo_look = $Datos[0]['campo_lookup'];

$tabla = $Datos[0]['nombre_tabla'];

$id_filtro = $Datos[0]['id_domo_atributo_filtro'];

$NmAttLookup = $Datos[0]['nombre_atributo'];




}


if ($filtro == 0) {

unset($Datos);

$Datos = LocalQueryHandler("BUILDER_getAttribute", $id_atributo_filtro, "");


$sig_combo = "";

if ($Datos) {

$sig_combo = $Datos[0]['nombre_atributo']; // es el siguiente lookup

$sig_tipo = $Datos[0]['id_domo_tipoatributo'];

$sig_id = $Datos[0]['id_domo_atributo'];

}




//************************ filtro de lookup por builder, RCAZENAV **********************/

//$filtroLookupForm2 = ' and activo = 1';

//************************************************** ***********************************//

$pasaValor = $tabla . "/" . $id_filtro;

unset($pParams);

$pParams = "'".$tabla . "','" . $campo_look . "','0'";



unset($Datos);

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

// unset($campo_look);



$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++;


}


este es el procedimiento y el type:


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

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;


type:

create type getlookupdata as
(id_tabla text, nombre_pelicula text)


desde ya gracias
  #2 (permalink)  
Antiguo 21/01/2012, 10:24
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: consulta: nombre de salida del type del procedimiento no sea fijo

Hola que tal, bueno como te comente hace tiempo de PHP no tengo mucho conocimiento , pero se me ocurre que lo regreses mediante una cadena.

Esto seria que al momento de regresar el valor lo concatenes y lo dejes en una sola variable.

Y para saber los parametros le anticipes algun signo o algo para identificar los valores de retorno y en PHP debes de buscar ese signo y tomar el valor.

Por ejemplo:

CREATE TYPE regX AS
( sCadena TEXT );

Le asignas a sCadena valor:

sCadena := 'Nombre: '|| sNombre ||' Calle: '|| sCalle ||' CP: '|| sCP;

En PHP buscas la palabra "Nombre" y tomas el valor de cierto tamaño. Y lo mismo para "Calle", etc, etc.

Como te digo es una idea, por qu el type no es dinamico ese es el problema. La otra es que crees funciones con sus types deacuerdo a como las necesites y tu identificar desde el sistema cual mandar llamar.

  #3 (permalink)  
Antiguo 23/01/2012, 06:16
 
Fecha de Ingreso: enero-2012
Mensajes: 29
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: consulta: nombre de salida del type del procedimiento no sea fijo

o sea se podria decir que en el type practicamente imposible q salga dato dinamico
  #4 (permalink)  
Antiguo 23/01/2012, 06:41
 
Fecha de Ingreso: enero-2012
Mensajes: 29
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: consulta: nombre de salida del type del procedimiento no sea fijo

ya lo estuve viendo y seria lo mismo....ya que claro como tu dices si busco el nombre en php funciona..ningun problema..pero el dato o nombre como ..en php viene dinamico desde otro procedimiento y asi hay varios datos mas q funcionan asi..entonces no podria buscar por el mismo nombre que envia el type...
me explico:
ej:

$campo_look: este dato ya viene de otro procedimiento, como ejemplo supongamos que envia.. nombre_pelicula ..entonces en el postgre en el procedimiento que estamos viendo deberia decir su salida nombre_pelicula para que pueda tomar los datos..pero como ya viene dinamico desde otra parte el $campo_look cambia, vemos otro lookup y en vez de nombre pelicula va a enviar por ejemplo nombre_actor..entonces la salida del type abria q cambiarla constantemente..ya que saldria por nombre_pelicula y al otro lado nombre_actor o sea nunca traeria datos.. ahy es el problema...ahora hacer funciones por cada una no se podria ya es un sistema q se hacen tablas nuevas cada vez..entonces se tendrian demasiadas funciones y se tendria q todo los dias hacer nuevas funciones..

Etiquetas: end, fijo, nombre, 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 03:55.