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

Trigger actualización campo tras update

Estas en el tema de Trigger actualización campo tras update en el foro de Mysql en Foros del Web. Buenas a todos y a todas. Antes que nada gracias por su tiempo. Les comento, quiero diseñar un trigger para mi bbdd mysql que despues ...
  #1 (permalink)  
Antiguo 24/07/2013, 05:35
 
Fecha de Ingreso: diciembre-2010
Mensajes: 12
Antigüedad: 13 años, 3 meses
Puntos: 0
Pregunta Trigger actualización campo tras update

Buenas a todos y a todas. Antes que nada gracias por su tiempo.

Les comento, quiero diseñar un trigger para mi bbdd mysql que despues de hacer update en una tabla, compruebe uno de sus campos y en función del valor tomado cambie otro campo de la misma tabla.

Nunca he programado un trigger y tengo dudas desde la propia sintaxis. Le he dado mil vueltas y no he sido capaz (lo mismo hasta no es posible hacer lo que pretendo).

La idea es algo como esto:
Código MySQL:
Ver original
  1. create trigger O_trabajos_AU after update
  2. on O_trabajos for each row
  3.     if (NEW.id_estado_trab != OLD.id_estado_trab) then
  4.     if (OLD.fecha_acep IS NULL) then
  5.         if  (NEW.id_estado_trab=9) ||(NEW.id_estado_trab=10) || (NEW.id_estado_trab=11) then
  6.             fecha_acep:=NOW()
No se si me explique bien. Espero su ayuda, muchas gracias!

Última edición por gnzsoloyo; 24/07/2013 a las 05:53
  #2 (permalink)  
Antiguo 24/07/2013, 07:57
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Trigger actualización campo tras update

Hola pezcaditox:

Veo algunos problemas en tu TRIGGER:

1. Si entiendo bien, lo que pretendes es actualizar el campo fecha_acep de acuerdo a una condición... aquí el detalle que veo es que estás haciendo el TRIGGER DESPUÉS de hacer la actualización...

Hasta donde recuerdo, NO ES POSIBLE MODIFICAR EL OBJETO NEW en DESPUÉS DE QUE SE ACTUALIZÓ, porque esto implicaría volver a ejecutar el TRIGGER... desde mi punto de vista, en primer lugar, deberías cambiar el y lanzarlo ANTES DEL UPDATE, sino es posible que te marque un error

Código:
Error Code : 1362
Updating of NEW row is not allowed in after trigger
2. Las asignaciones de valores no se hacen con :=, las haces con SET.

http://dev.mysql.com/doc/refman/5.0/...-triggers.html

3. Las sentencias IF terminan con END IF

http://dev.mysql.com/doc/refman/5.0/...statement.html

Intenta hacer el TRIGGER ASI:

DELIMITER $$

Código MySQL:
Ver original
  1. CREATE TRIGGER O_trabajos_AU AFTER UPDATE ON O_trabajos FOR EACH ROW
  2.     IF (NEW.id_estado_trab != OLD.id_estado_trab) THEN
  3.        IF (OLD.fecha_acep IS NULL) THEN
  4.           IF  (NEW.id_estado_trab=9) || (NEW.id_estado_trab=10) || (NEW.id_estado_trab=11) THEN
  5.             SET NEW.fecha_acep = NOW();
  6.           END IF;
  7.        END IF;
  8.     END IF;
  9. END;$$
  10.  
  11. DELIMITER ;

La lógica de los IF's dependen de lo que quieres hacer... no sé si es la correcta o tengas que hacer alguna otra modificación.

Haz la prueba y nos comentas...

Saludos
Leo.
  #3 (permalink)  
Antiguo 25/07/2013, 02:26
 
Fecha de Ingreso: diciembre-2010
Mensajes: 12
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Trigger actualización campo tras update

Buenas leonardo_josue! gracias por la contestación. Entendiste perfectamente lo que pretendía, actualizar un campo de fecha de aceptación de un trabajo "fecha_acept" cuando el estado del trabajo cambie a uno determinado.

Como anticipabas tu mismo, efectivamente me da el error

Error Code : 1362
Updating of NEW row is not allowed in after trigger

Estoy dándole una vueltilla a la cabeza a ver si se me ocurre como hacer, alguna sugerencia?

De todos modos gracias por la lección sobre triggers, aunque no lo creas busque en google pero no me quedo nada claro...

un saludo y gracias de nuevo!
  #4 (permalink)  
Antiguo 25/07/2013, 07:44
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Trigger actualización campo tras update

Hola pezcaditox:

Probaste el TRIGGER que te puse en el post pasado??? ahí aplico todas las modificaciones que te comenté... es decir, te ahorré el trabajo de corregir tus errores .

Si el este TRIGGER te manda error, entonces postea el error que te está marcando, o si no te sirve, entonces dinos qué está mal...

Saludos
Leo.
  #5 (permalink)  
Antiguo 26/07/2013, 01:28
 
Fecha de Ingreso: diciembre-2010
Mensajes: 12
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Trigger actualización campo tras update

Hola leonardo_josue,

si lo probe, me dio el error q tu anticipabas...

Error Code : 1362
Updating of NEW row is not allowed in after trigger

estoy pensando como hacerlo de otra manera pero no doy con ello, es la pescadilla q se muerde la cola, si con un update actualizo un campo siempre me lo lanzara de nuevo, y no puedo actualizar el campo sin saber la actualizacion anterior...
  #6 (permalink)  
Antiguo 26/07/2013, 07:42
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Trigger actualización campo tras update

Hola de nuevo pezcaditox:

En mi post te coloqué esto:

Cita:
en primer lugar, deberías cambiar el y lanzarlo ANTES DEL UPDATE
Efectivamente cometí un error al dejarlo como AFTER UPDATE... debe ser BEFORE UPDATE. Sin embargo creo que debiste de haberte dado cuenta de este detalle... No esperes encontrar una solución sólo para copiar y pegar... tienes que revisar que lo que estás ejecutando sea coherente con lo que te ponemos en las explicaciones.

Haz la prueba y nos comentas.

Saludos
Leo.

Etiquetas: trigger, update
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 05:18.