Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/10/2011, 12:38
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: 17 años, 2 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)