MySQL - ERROR 1442

 
Vista:
sin imagen de perfil

ERROR 1442

Publicado por Ronaldo (8 intervenciones) el 08/06/2017 21:13:35
Estoy trabajado con un trigger y sin embargo me marca el siguiente error:
#1442 - Can't update table 'salida' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Me podrían ayudar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TRIGGER TR_CUENTAS
AFTER INSERT ON salida FOR EACH ROW
 
BEGIN
DECLARE cantidad_a INTEGER;
DECLARE cantida_s INTEGER;
DECLARE total INTEGER;
SET cantidad_a=0;
SET cantida_s=0;
SET total=0;
 
SELECT cantidad_total INTO cantidad_a FROM almacen WHERE almpro=(SELECT salipro from salida WHERE STATUS='N');
SELECT cantidad_sal INTO cantida_s FROM salida WHERE status='N';
IF cantidad_a >= cantida_s THEN
UPDATE almacen SET cantidad_total=cantidad_a-cantida_s WHERE almpro=(SELECT salipro from salida WHERE STATUS='N');
UPDATE salida SET status='R' WHERE status='N';
END IF;
END
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: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

ERROR 1442

Publicado por leonardo_josue (414 intervenciones) el 08/06/2017 21:41:21
Hola Ronaldo:

Creo que es bastante claro el error que te está marcando al indicar que no puedes actualizar la tabla SALIDA porque es la misma que está desencadenando el trigger...

No sé cual sea tu intención, dado que por un lado, el TRIGGER lo ejecutas a la hora de INSERTAR un registro en la tabla SALIDA... si lo que pretendes es que se actualice el status del registro que acabas de insertar, lo que puedes hacer es ejecutar el TRIGGER ANTES de INSERTAR y modificar el valor... checa esta liga, aquí se plantea algo similar:

https://stackoverflow.com/questions/12203859/mysql-trigger-cannot-update-table-getting-error-1442

Si esto no te sirve, explícanos qué es lo que pretendes hacer para ayudarte a buscar alguna otra alternativa.

Saludos
Leo.
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

ERROR 1442

Publicado por Ronaldo (8 intervenciones) el 08/06/2017 21:46:33
Hola que tal, lo que pretendo es que al insertar un registro en la tabla salida, me actualice la cantidad total de productos de la tabla almacén, pero ya llevo rato y no puedo con el error
Muchas Gracias Leo
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: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

ERROR 1442

Publicado por leonardo_josue (414 intervenciones) el 08/06/2017 22:10:30
Hola de nuevo Ronaldo...

Lee con atención Ronaldo, el problema no es es que actualices la tabla ALMACEN sino que también estás tratando de actualizar la tabla SALIDA que es la misma que desencadena el TRIGGER:

1
2
3
4
5
6
...
AFTER INSERT ON salida FOR EACH ROW
...
UPDATE almacen SET cantidad_total=cantidad_a-cantida_s WHERE almpro=(SELECT salipro from salida WHERE STATUS='N');
UPDATE salida SET status='R' WHERE status='N'; <- ESTA ES LA LA LINEA QUE PRODUCE EL ERROR
...

¿Checaste la liga que puse? ¿Te sirvió de algo?

Saludos
Leo.
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

ERROR 1442

Publicado por Ronaldo (8 intervenciones) el 08/06/2017 22:20:10
Amigo muchisimas gracias, si me salio
quedo a si

1
2
3
4
5
6
7
8
9
10
11
12
13
DECLARE cantidad_a INTEGER;
DECLARE cantida_s INTEGER;
DECLARE total INTEGER;
SET cantidad_a=0;
SET cantida_s=0;
SET total=0;
 
SELECT cantidad_total INTO cantidad_a FROM almacen WHERE almpro=(SELECT salipro from salida WHERE STATUS='N');
SELECT cantidad_sal INTO cantida_s FROM salida WHERE status='N';
IF cantidad_a >= cantida_s THEN
UPDATE almacen SET cantidad_total=cantidad_a-cantida_s WHERE almpro=(SELECT salipro from salida WHERE STATUS='N');
END IF;
END

Ya me dejo insertar, gracias Leo me sirvió demasiado tu ayuda.
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