Error en trigger de MariaDB - No se ejecuta
Publicado por Ariel Peralta (1 intervención) el 21/12/2020 21:01:36
tengo un trigger de una tabla que deberia dispararse y actualizar o insertar en otra tabla una cantidad, pero no hace nada al momento de que se hace un inserte sobre la tabla que tiene el trigger.
Adjunto los codigos de los triggers:
1. ESTE PROCEDIMIENTO ES LLAMADA POR OTRO PROCEDIMIENTO.
2. ESTE PROCEDIMIENTO LLAMA AL PRIMER PROCEDIMIENTO PARA REALIZAR LOS CAMBIOS.
3. ESTE ES EL TRIGGER QUE LLAMA A LOS PROCEDIMIENTOS Y QUE DEBERIA AFECTAR CUANDO SE REALIZA UN INSERT SOBRE LA TABLA "detalle_venta".
Adjunto los codigos de los triggers:
1. ESTE PROCEDIMIENTO ES LLAMADA POR OTRO PROCEDIMIENTO.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
DELIMITER //
CREATE OR REPLACE PROCEDURE P_ACT_ITEM_DEP_INS_UPD
(
IN xIDDEPOSITO INT,
IN xIDITEM INT,
IN xCANTIDAD_ENTRADA DOUBLE,
IN xCANTIDAD_SALIDA DOUBLE
)
BEGIN
DECLARE V_REGISTROS INT;
SELECT COUNT(*) INTO V_REGISTROS FROM item_deposito
WHERE iditem = xIDITEM
AND iddeposito = xIDDEPOSITO;
IF V_REGISTROS > 0 THEN
INSERT INTO item_deposito (iditem, iddeposito, cantidad)
VALUES(xIDITEM, xIDDEPOSITO, xCANTIDAD_ENTRADA - xCANTIDAD_SALIDA);
ELSE
UPDATE item_deposito
SET cantidad = cantidad + XCANTIDAD_ENTRADA - xCANTIDAD_SALIDA
WHERE iditem = xIDITEM
AND iddeposito = xIDDEPOSITO;
END IF;
END;
2. ESTE PROCEDIMIENTO LLAMA AL PRIMER PROCEDIMIENTO PARA REALIZAR LOS CAMBIOS.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
DELIMITER //
CREATE OR REPLACE PROCEDURE P_ACT_ITEM_DEP
(
IN xIDITEM INT,
IN xIDVENTA INT,
IN xCANTIDAD DOUBLE
)
BEGIN
DECLARE V_DEPOSITO INT;
DECLARE V_CANTIDAD_REGISTROS INT;
DECLARE V_CANTIDAD_ENTRADA DOUBLE;
DECLARE V_CANTIDAD_SALIDA DOUBLE;
DECLARE CURSOR_VENTA CURSOR FOR
SELECT iddeposito FROM venta WHERE idventa = xIDVENTA;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET @hecho = TRUE;
OPEN CURSOR_VENTA;
LOOP_1: LOOP
FETCH CURSOR_VENTA INTO V_DEPOSITO;
IF @hecho THEN
LEAVE LOOP_1;
END IF;
END LOOP LOOP_1;
CLOSE CURSOR_VENTA;
SET V_CANTIDAD_ENTRADA = 0;
SET V_CANTIDAD_SALIDA = xCANTIDAD;
CALL P_ACT_ITEM_DEP_INS_UPD(V_DEPOSITO, xIDITEM, V_CANTIDAD_ENTRADA, V_CANTIDAD_SALIDA);
END;
//
3. ESTE ES EL TRIGGER QUE LLAMA A LOS PROCEDIMIENTOS Y QUE DEBERIA AFECTAR CUANDO SE REALIZA UN INSERT SOBRE LA TABLA "detalle_venta".
1
2
3
4
5
6
7
8
9
10
11
12
DELIMITER //
CREATE OR REPLACE TRIGGER TR_DETALLE_VENTA_STOCK_INS
BEFORE INSERT ON detalle_venta
FOR EACH ROW
BEGIN
CALL P_ACT_ITEM_DEP(NEW.iditem, NEW.idventa, NEW.cantidad);
END;
//
Valora esta pregunta


0