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

Problema al modificar Trigger

Estas en el tema de Problema al modificar Trigger en el foro de Mysql en Foros del Web. Buenas a todos!! Mirando por el foro solo he encontrado un tema parecido a este, pero no he encontrado una solucion. Les comento: Estoy liado ...
  #1 (permalink)  
Antiguo 09/11/2011, 04:30
Avatar de Richifredo  
Fecha de Ingreso: noviembre-2011
Mensajes: 5
Antigüedad: 12 años, 5 meses
Puntos: 0
Problema al modificar Trigger

Buenas a todos!!

Mirando por el foro solo he encontrado un tema parecido a este, pero no he encontrado una solucion. Les comento:

Estoy liado en una modificacion de control de stockage de una tienda, y en la cual, la base de datos tira de "triggers". Nunca los habia usado antes, asi que tampoco es que ande muy sobrado de su funcionamiento.
El trigger "conflictivo" es a la hora de actualizar la tabla que contiene el stock, que se ejecuta automaticamente al realizar una compra. Es este:

Código:
CREATE TRIGGER articulos_vendidos AFTER INSERT ON art_ventas
FOR EACH ROW
BEGIN
DROP TRIGGER IF EXISTS `base_de_datos`.`articulos_vendidos`;
UPDATE almacen SET
almacen.stock = almacen.stock -  new.cant_articulos;
END//
Aplicandolo tal cual, actualiza el stock de todos los articulos, pero con la cantidad sumada de todos los articulos (la insercion a la hora de realizar la compra la hago con un while, y a cada insert me ejecuta el trigger de nuevo). Creo que lo que deberia hacer es quitar del trigger "FOR EACH ROW", pero entonces la implementacion del trigger (a traves de phpmyadmin) salta con un error #1064.

Alguien puede darme una solucion?
Gracias.
  #2 (permalink)  
Antiguo 09/11/2011, 06:01
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 al modificar Trigger

No puedes quitar el "FOR EACH ROW" poruna razón básica y sencilla: es parte del trigger desde el momento en que un trigger se ejecuta con todos y cada uno de los registros impactados por el evento, que en este caso es un INSERT. Además, ten en cuenta que el FOR EACH se refiere a la tabla del TRIGGER y no a la que pones en el cuerpo (almacen).
Tu problema base es que no estás poniendo una condición WHERE a ese UPDATE dentro del TRIGGER. Por eso te afecta a todos los registros.
Lo que debes hacer es, en todo caso, usar el ID del registro entrante para hacer esa actualización:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE TRIGGER articulos_vendidos AFTER INSERT ON art_ventas
  3.     DROP TRIGGER IF EXISTS `base_de_datos`.`articulos_vendidos`;
  4.     UPDATE almacen
  5.     SET almacen.stock = almacen.stock -  NEW.cant_articulos
  6.     WHERE almacen.cod_articulo = NEW.cod_articulo;
  7. END$$
  8. DELIMITER;
Eso suponiendo que el id del articulo se llama así...
__________________
¿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 09/11/2011, 06:41
Avatar de Richifredo  
Fecha de Ingreso: noviembre-2011
Mensajes: 5
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Problema al modificar Trigger

Perfecto. Todo ha funcionado de maravilla.
Gracias de nuevo!!

Etiquetas: modificar, php, 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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:02.