MySQL - Me da error de actualizacion en siguiente tigger

 
Vista:
sin imagen de perfil

Me da error de actualizacion en siguiente tigger

Publicado por Marcelo (2 intervenciones) el 24/05/2016 19:14:18
Error:

#1442 - Can't update table 'ObleasQR' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.


1
2
3
4
5
6
CREATE TRIGGER `CargaFechaVtoOblea` AFTER UPDATE ON `ObleasQR`
 FOR EACH ROW BEGIN
	IF new.fechaentregada <> '2200-01-01' THEN
           UPDATE ObleasQR SET ObleasQR.vencimiento = DATE_ADD(ObleasQR.fechaentregada, INTERVAL 724 DAY) WHERE ObleasQR.idqr = OLD.idqr;
    END IF;
END

Que puede estar pasando?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 20
Ha disminuido su posición en 25 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Me da error de actualizacion en siguiente tigger

Publicado por Gonzalo (103 intervenciones) el 25/05/2016 16:01:08
Está pasando lo mismo que te dice el mensaje...

#1442 - Can't update table 'ObleasQR' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

"No puede actualizar la tabla "ObleasQR" en stored function/trigger porque la misma ya está en uso por la setencia que invoca esta misma stored function/trigger.
"

Por lo menos intenta LEER lo que el mensaje te dice.

NO PUEDES ejecutar un UPDATE/INSERT/DELETE sobre la misma tabla que dispara el TRIGGER. MySQL jamás te lo permitirá. La tabla se encuentra bloqueada para escritura por tu propio trigger.
Además, piensalo asi: Si tu TRIGGER se dispara ante un UPDATE, y dentro del mismo tiene un UPDATE que a su vez dispararía el trigger, que ejecutaría un UPDATE, que dispararía el TRIGGER, que ejecutaría un UPDATE... y así hasta el infinito.

¿Entiendes el concepto de deadlock y el de infinte loop?

Bueno, MySQL no te admite esa acción precisamente por eso.

¿Solución?

Simplemente revisa bien lo que estás haciendo y planea de nuevo tu solución, porque ese trigger es inentendible, y me parece que estás intentando hacer acciones ilegales, ya que impactan en forma global a toda la tabla.
Tengo la seria sospecha de que eso que quieres hacer ni siquiera necesita estar en TRIGGER...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Me da error de actualizacion en siguiente tigger

Publicado por Marcelo (2 intervenciones) el 25/05/2016 16:14:36
Hola Gonzalo
Gracias por responder...
Te comento q me parece un poco agresiva tu respuesta, pero de todas formas valoro mucho tu tiempo.
No todos sabemos lo mismo y creo q si estamos dispuestos a contestar una pregunta es para ayudar y dar aliento al que tiene el problema...
Un abrazo
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 20
Ha disminuido su posición en 25 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Me da error de actualizacion en siguiente tigger

Publicado por Gonzalo (103 intervenciones) el 25/05/2016 16:37:19
@Marcelo:
En la mayoría de los foros especializados en desarrollo, programación y bases de datos hubieses recibido como respuesta un simple RTFM. Lo mío ha sido el epítome de la amabilidad, comparativamente.
Mi intención es que leas, reacciones y veas que la respuesta a tu problema las tienes directamente delante de tu vista, y que el resto sólo requiere leer el manual de referencia. En el manual vas a encontrar no sólo los códigos de error, sino también el detalle de las restricciones que cada cosa tiene, incluyendo los triggers.

https://dev.mysql.com/doc/refman/5.7/en/create-trigger.html

Todos los que nos dedicamos full-time a las BBDD usamos el manual, porque nadie sabe ni se pone a memorizar todas las cosas. Y máxime cuando algunas de ellas cambian de comportamiento según cual sea el DBMS a utilizar.

Sin pretender ofender, te recomiendo que antes que nada mires el manual de referencia y te fijes lo que dice. Si el manual no te lo soluciona, entonces es tiempo de foros... como hacemos todos, según te dije.

Buena suerte con tu viaje por el mundo de las BBDD.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 201
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Me da error de actualizacion en siguiente tigger

Publicado por Rafael (97 intervenciones) el 26/05/2016 08:14:19
Totalmente de acuerdo NO PUEDES ejecutar otro UPDATE...

No obstante esta aceveracion PUEDES modificar los valores... puedes probar con:
1
2
3
4
5
6
CREATE TRIGGER `CargaFechaVtoOblea` AFTER UPDATE ON `ObleasQR`
 FOR EACH ROW BEGIN
	IF new.fechaentregada <> '2200-01-01' THEN
           new.vencimiento = DATE_ADD(new.fechaentregada, INTERVAL 724 DAY);
    END IF;
END

Que estas haciendo ???
Recalculando el campo pero no lo mandas EJECUTAR un nuevo UPDATE sobre lo que tienes bloqueado, si no que alteras el valor del campo antes de que se realice el UPDATE...

Saludos
Pd.Si te sirve la info a mi me sirve un +1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Me da error de actualizacion en siguiente tigger

Publicado por Ezequiel (2 intervenciones) el 25/02/2017 22:33:10
Y no hay manera alguna, ya sea por algun procedimiento, funcion, etc de ejecutar un triger en una tabla para que realice una operación en la misma tabla? Ya que una empresa hace poco me pidió hacer lo mismo. Este es el ejercicio que me dieron " Definir un trigger en la tabla Accounts que le coloque el valor (999) al campo Fax cada vez que se genere un nuevo registro.". A mi parecer por lo que he leído, es imposible resolver ese ejercicio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar