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

Trigger mysql

Estas en el tema de Trigger mysql en el foro de Mysql en Foros del Web. Hola a todos , mi problema es el siguiente tengo el siguiente trigger: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original BEGIN   SET @auto = ( ...
  #1 (permalink)  
Antiguo 16/07/2013, 16:13
Avatar de herran1212  
Fecha de Ingreso: julio-2013
Ubicación: cali
Mensajes: 89
Antigüedad: 10 años, 9 meses
Puntos: 3
Trigger mysql

Hola a todos , mi problema es el siguiente tengo el siguiente trigger:
Código MySQL:
Ver original
  1.  
  2. SET @auto=(SELECT automatico FROM items_configuracion_codigo WHERE id=NEW.id_configuracion);
  3.  
  4. IF @auto = 'true' THEN
  5.      
  6.     SET @cuantos = (SELECT codigo FROM items_familia_grupo_subgrupo WHERE id_familia=NEW.id_familia AND id_grupo=NEW.id_grupo AND id_empresa=NEW.id_empresa AND activo=1  ORDER BY CAST(codigo AS SIGNED) DESC LIMIT 0,1);
  7.    
  8.     IF @cuantos >0 THEN
  9.           SET NEW.codigo=RIGHT(CONCAT('0000000000',@cuantos+1),LENGTH(@cuantos));
  10.     ELSE
  11.           SET NEW.codigo = CONCAT(
  12.                                                                     # LPAD('numero','cantidad de digitos','numero que se concatena para llenar el valor de digitos')
  13.                                                                    LPAD(1,2,'0')
  14.                                                            );
  15.      END IF;
  16.  

lo utilizo para verificar si el codigo a insertar es automatico y si es que lo genere de forma automatica, el problema es que llegado al if de @cuantos no me toma el valor mayor y lo suma sino que es como si no hubiera ningun codigo es decir se salta al else ais haya otro codigo, ya relice el query y funciona, nose que pueda ser, si pudieran ayudarme os lo agradeceria

Última edición por gnzsoloyo; 16/07/2013 a las 17:45
  #2 (permalink)  
Antiguo 16/07/2013, 20:22
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, 4 meses
Puntos: 2658
Respuesta: Trigger mysql

Personalmente no le encuentro mucho el sentido de poner un VARCHAR para el código, si cada vez que necesitas crear un registro nuevo, debes convertirlo a un numero entero.
¿Por qué haces eso? ¿No sería más simple usar directamente un INT?

Fuera de eso, hay una condición que te estás olvidando: Las variables de usuario deben inicializarse siempre que se van a usar, o de lo contrario su valor es NULL. Y en MySQL toda operación de asignación, cálculo o concatenación entre cualquier valor y NULL da... NULL.

La cosa andaría mas o menos por acá:
Código MySQL:
Ver original
  1. delimiter $$
  2.  
  3. CREATE TRIGGER testref BEFORE INSERT ON test1
  4.    
  5.     # Las variables de usuario siempre se deben incializar.
  6.    
  7.     SET @auto:= FALSE;
  8.     SET @cuantos := 0;
  9.    
  10.     # Es más eficiente poner un INTO.
  11.    
  12.     SELECT automatico
  13.     FROM items_configuracion_codigo
  14.     WHERE id=NEW.id_configuracion
  15.     INTO @auto;
  16.    
  17.     # El NULL es una condicion que se debe considerar y administrar.
  18.    
  19.     SET @auto := IF(@auto IS NULL, FALSE, TRUE);
  20.    
  21.     IF @auto = true THEN
  22.         SELECT codigo
  23.         FROM items_familia_grupo_subgrupo
  24.         WHERE id_familia = NEW.id_familia
  25.             AND id_grupo = NEW.id_grupo
  26.             AND id_empresa = NEW.id_empresa
  27.             AND activo=1  
  28.         ORDER BY CAST(codigo AS SIGNED) DESC
  29.         LIMIT 1
  30.         INTO @cuantos;
  31.  
  32.         # El NULL es una condicion que se debe considerar y administrar.
  33.  
  34.         SET @cuantos := IF(@cuantos IS NULL, 0, @cuantos);
  35.        
  36.         IF @cuantos >0 THEN
  37.             SET NEW.codigo=RIGHT(CONCAT('0000000000',@cuantos+1),LENGTH(@cuantos));
  38.         ELSE
  39.             SET NEW.codigo = CONCAT(LPAD(1,2,'0'));
  40.         END IF;
  41.     END IF;
  42. END$$
  43.  
  44. delimiter ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: insert, select, trigger
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 15:06.