Ver Mensaje Individual
  #2 (permalink)  
Antiguo 16/07/2013, 20:22
Avatar de gnzsoloyo
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: 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)