Ver Mensaje Individual
  #21 (permalink)  
Antiguo 03/02/2015, 16:07
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: Problema con triggers

Cita:
Iniciado por Begotten Ver Mensaje
pero aun asi tendria que hacer una comparacion dentro del trigger o me equivoco? creo que el problema no esta en eso.
Completamente errado. La comparación se vuelve muchísimo mas simple y eficiente.

Código MySQL:
Ver original
  1. delimiter $$
  2. CREATE TRIGGER `actualizarObra2`
  3. AFTER UPDATE ON `detalle_obra`
  4.     IF NEW.fecha_baja IS NULL THEN
  5.         UPDATE obra
  6.             SET `egresos_t`= obra.egresos_t + (NEW.egresos - OLD.egresos),
  7.             `ingresos_t` = obra.ingresos_t + (NEW.ingresos - OLD.ingresos),
  8.             `recepcion_t`= obra.recepcion_t + (NEW.recepcion - OLD.recepcion) ,
  9.             `combustible_recepcion_t`= obra.combustible_recepcion_t + (NEW.combustible_recepcion - OLD.combustible_recepcion),
  10.             `combustible_emision_t` = obra.combustible_emision_t + (NEW.combustible_emision - OLD.combustible_emision)
  11.         WHERE obra.codigo = OLD.cod_obra;
  12.     ELSE
  13.         UPDATE obra
  14.             SET `egresos_t` = obra.egresos_t - OLD.egresos,
  15.             `ingresos_t`    = obra.ingresos_t - OLD.ingresos,
  16.             `recepcion_t`   = obra.recepcion_t - OLD.recepcion,
  17.             `combustible_recepcion_t`= obra.combustible_recepcion_t - OLD.combustible_recepcion,
  18.             `combustible_emision_t`  = obra.combustible_emision_t - OLD.combustible_emision ,
  19.             `fecha_baja` = NEW.fecha_baja
  20.         WHERE obra.codigo = OLD.cod_obra ;
  21.     END IF;
  22. END $$
  23. delimiter ;
Además, la existencia de un campo de fecha de baja permite algo que tu no estás considerando: trazabilidad.

Por cierto, había un error severo: faltaban los cierres de las sentencias UPDATE...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 03/02/2015 a las 16:19