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

problema con triggers

Estas en el tema de problema con triggers en el foro de Mysql en Foros del Web. Hola a todos: Estoy empezando a trabajar con los triggers de mysql y tengo el siguiente problema quiero que después de insertar un registro en ...
  #1 (permalink)  
Antiguo 06/10/2011, 11:16
 
Fecha de Ingreso: enero-2011
Mensajes: 74
Antigüedad: 13 años, 3 meses
Puntos: 4
problema con triggers

Hola a todos:
Estoy empezando a trabajar con los triggers de mysql y tengo el siguiente problema quiero que después de insertar un registro en una tabla me corra un update sobre un campo de ese mismo registro, mi codigo es :
Código PHP:
DELIMITER $$
CREATE    
    TRIGGER 
`calc_totalAFTER INSERT ON `orden_producto_tabla
    FOR 
EACH ROW BEGIN     
     UPDATE orden_producto_tabla SET total
=cantidad precio_unitario;     
    
END;
$$

DELIMITER 
y el error es:
Can't update table 'orden_producto_tabla' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

gracias de antemano ,espero me puedan ayudar
  #2 (permalink)  
Antiguo 06/10/2011, 12:38
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: problema con triggers

Es simplísimo. El propio MySQL te lo está diciendo: No puedes hacer una operación DML contra la misma tabla donde se está ejecutando el TRIGGER.
Para acceder al registro que está entrando debes usar las pseudovariables NEW u OLD.
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE    
  3.     TRIGGER `calc_total` AFTER INSERT ON `orden_producto_tabla`  
  4.     FOR EACH ROW BEGIN      
  5.      SETNEW. total= NEW.cantidad * NEW.precio_unitario;      
  6.     END;
  7. $$
  8.  
  9. DELIMITER ;
Ahora bien, conceptualmente hablando, es un trigger inútil por dos razones:
1) No se deben almacenar valores calculables en una base. Implica almacenar datos innecesarios, requieren mantenimiento de consistencia, y además cálculos como este se hacen en la consulta SELECT directamente sin pérdida de performance (y con los datos actualizados).
2) Aún si lo quisieras hacer, ¿por qué no pones ese cálculo en el INSERT? El resultado sería el mismo.

Como digo, si lo que quieres es probar cómo funciona un TRIGGER, hazlo, pero no implementes algo así cuando estés trabajando en serio.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/10/2011, 13:54
 
Fecha de Ingreso: enero-2011
Mensajes: 74
Antigüedad: 13 años, 3 meses
Puntos: 4
Respuesta: problema con triggers

Gracias por la ayuda , entiendo sus recomendaciones, lo que pasa es que es un favor que le estoy haciendo a un amigo y para no perder tiempo programando un montón de código estoy usando una herramienta para generar codigo php de una base de datos, casos de uso de administración básicamente, la herramienta es phpmaker pero claro que cuando programo yo sigo estás reglas, lo entiendo perfectamente, igual estoy muy inexperto en el uso de store procedures y triggers así que se me pinto la oportunidad para jugar con estos, si tiene algún link para aprender de cero un poco de este tema se lo agradecería
gracias una vez más

Etiquetas: sql, tabla, 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 17:45.