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

Mysql Trigger Error 1442

Estas en el tema de Mysql Trigger Error 1442 en el foro de Mysql en Foros del Web. Buen día Estoy trabajando en un trigger para que al insertar datos en la tabla C, actualice los saldos en la tabla B y la ...
  #1 (permalink)  
Antiguo 16/05/2013, 10:30
 
Fecha de Ingreso: noviembre-2008
Mensajes: 5
Antigüedad: 15 años, 4 meses
Puntos: 0
Pregunta Mysql Trigger Error 1442

Buen día

Estoy trabajando en un trigger para que al insertar datos en la tabla C, actualice los saldos en la tabla B y la tabla A.

sin embargo me marca el siguiente error:
SQL Error (1442): Can't update table "ext_rel003referenciasdocumentos8va" in stored function/trigger because it is already used by stament wich invoked this stored function/trigger.

Ya tengo un rato peleando con esto y comienzo a desquiciarme, apreciera mucho que me pudieran echar una mano.

Saludos.

Este es el código del trigger.
Código MySQL:
Ver original
  1. delimiter $$
  2. create  trigger actualiza_saldo
  3. after insert on ext_rel003referenciasdocumentos8va
  4. begin  
  5.    
  6.     declare cantidad_ numeric(12,4);
  7.     declare fraccion_ int;
  8.    
  9.     select NEW.n_cantidad into cantidad_ ;
  10.     select New.i_cve_fraccion8va into fraccion_  ;
  11.    
  12.     update ext_det003fracciones8va
  13.     set n_saldo = n_saldo + cantidad_
  14.     where i_cve_fraccion8va = fraccion_;
  15.  
  16.     update ext_cat003documentos8va  
  17.     set n_saldo = n_saldo + cantidad_
  18.     where i_cve_documento8va = (select i_cve_documento8va
  19.                                                 from ext_det003fracciones8va
  20.                                                 where i_cve_fraccion8va = fraccion_);
  21.    
  22.  
  23. END$$
  24. delimiter ;

Última edición por gnzsoloyo; 16/05/2013 a las 11:27
  #2 (permalink)  
Antiguo 16/05/2013, 11:30
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, 4 meses
Puntos: 2658
Respuesta: Mysql Trigger Error 1442

Es un error común en los que recién se inician: No puedes realizar modificaciones de datos en la misma tabla que dispara el trigger, porque está bloqueada para escritura.
Este segmento de tu código:
Código MySQL:
Ver original
  1. UPDATE ext_cat003documentos8va  
  2.     SET n_saldo = n_saldo + cantidad_
  3. WHERE i_cve_documento8va = (SELECT i_cve_documento8va
  4.                                                 FROM ext_det003fracciones8va
  5.                                                 WHERE i_cve_fraccion8va = fraccion_);
No es válido.
__________________
¿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 16/05/2013, 12:28
 
Fecha de Ingreso: noviembre-2008
Mensajes: 5
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Mysql Trigger Error 1442

Ok gracias gnzsoloyo, ya arregle esa parte quedó así el código.

delimiter $$
create trigger actualiza_saldo_fraccion
before insert on ext_rel003referenciasdocumentos8va
for each row
begin

declare cantidad_ numeric(12,4);
declare fraccion_ int;

select NEW.n_cantidad into cantidad_ ;
select New.i_cve_fraccion8va into fraccion_ ;

update ext_det003fracciones8va
set n_saldo = n_saldo + cantidad_
where i_cve_fraccion8va = fraccion_;



END$$
delimiter ;

Ahora mi pregunta es ¿Para actualizar el saldo en la tabla A?
¿Creo otro disparador sobre la tabla B para que cuando se actualice actualice el saldo de A?

Saludos.
  #4 (permalink)  
Antiguo 16/05/2013, 12:31
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, 4 meses
Puntos: 2658
Respuesta: Mysql Trigger Error 1442

Cita:
¿Para actualizar el saldo en la tabla A?
¿Creo otro disparador sobre la tabla B para que cuando se actualice actualice el saldo de A?
Generarías un loop eterno, provocando un deadlock...

Ni lo intentes.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: 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




La zona horaria es GMT -6. Ahora son las 16:35.