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

¿Cómo hago este Trigger?::

Estas en el tema de ¿Cómo hago este Trigger?:: en el foro de Mysql en Foros del Web. Help porfa, como proceso una query en un trigger cuyo resultado es un arreglo de datos, los que luego deben ser almacenados en un campo ...
  #1 (permalink)  
Antiguo 23/10/2009, 12:50
 
Fecha de Ingreso: enero-2007
Mensajes: 97
Antigüedad: 17 años, 3 meses
Puntos: 1
¿Cómo hago este Trigger?::

Help porfa, como proceso una query en un trigger cuyo resultado es un arreglo de datos, los que luego deben ser almacenados en un campo determinado.?

Por ejemplo, en una tabla tengo un campo "cod_validos" que debe contener el resultado de:

SELECT codigo FROM `otraTabla` WHERE correlativo>5
...Cuyo resultado supongamos sea:
XFG
HJT
OTE

y estos datos deben ir en mi campo "cod_validos" así: XFG-HJT-OTE


Gracias!!
__________________
-La duda es la base del conocimiento-
  #2 (permalink)  
Antiguo 23/10/2009, 12:58
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ¿Cómo hago este Trigger?::

se me ocurre que recorras la consulta con un cursor, y vayas concatenando cada registro en una variable previamente declarada.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 25/10/2009, 07:50
 
Fecha de Ingreso: enero-2007
Mensajes: 97
Antigüedad: 17 años, 3 meses
Puntos: 1
Respuesta: ¿Cómo hago este Trigger?::

Cita:
Iniciado por huesos52 Ver Mensaje
se me ocurre que recorras la consulta con un cursor, y vayas concatenando cada registro en una variable previamente declarada.
Gracias por responder, efectivamente con un cursor puedo lograr lo que necesito, sin embargo, tengo un problema para ir concatenando las variables en el LOOP::

Código:
   BEGIN  
   DECLARE done BOOLEAN DEFAULT FALSE;  
   DECLARE id integer; 
   DECLARE acum text;
   DECLARE c1 cursor for SELECT id_larg FROM `largo` WHERE noc_larg=param1;  
   DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE;  
   open c1;  
   c1_loop: 
   LOOP  
   		fetch c1 into id;
      		SET acum =  CONCAT(acum,'-',id);
      		IF `done` THEN LEAVE c1_loop; END IF;   
   END LOOP c1_loop; 
       UPDATE `tablaparatest` SET texto = acum WHERE id_test=1;
  CLOSE c1;     
  END ;
En "id" tengo un array con varios numeros, el problema lo tengo en el:

SET acum = CONCAT(acum,'-',id); ..al final me guarda NULL en la BD

¿Cómo puedo hacer este acumulado de variables?

Gracias!
__________________
-La duda es la base del conocimiento-

Última edición por phidalgo; 25/10/2009 a las 07:57
  #4 (permalink)  
Antiguo 25/10/2009, 09:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ¿Cómo hago este Trigger?::

No necesitas un TRIGGER (que se dispara sólo con INSERT, UPDATE o DELETE), sino una función de agregación que opere con el GROUP BY, que sería: GROUP_CONCAT().
Código sql:
Ver original
  1. SELECT GROUP_CONCAT(DISTINCT codigo SEPARATOR '-')  cod_validos
  2. FROM `otraTabla`
  3. WHERE correlativo>5
  4. GROUP BY campoAgrupamiento;
A partir de esta sentencia, lo que debes hacer en todo caso es un INSERT ... SELECT...
Para darte una sintaxis correcta, deberías darnos mejor información: Estructura de tablas, campos de relación, campos de agrupamiento, etc.
La info que posteas es algo insuficiente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 27/10/2009, 06:05
 
Fecha de Ingreso: enero-2007
Mensajes: 97
Antigüedad: 17 años, 3 meses
Puntos: 1
Respuesta: ¿Cómo hago este Trigger?::

Buen dato gnzsoloyo, exactamente con lo que propones me bastó para resolver mi duda.
De paso lo del cursor de paso igual me ayudó a solucionar otro problemilla.

Gracias muchas, saludos!!
__________________
-La duda es la base del conocimiento-
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 11:22.