基本上我没有找到我必须结束的地方。所以希望你能帮助我知道它必须找到什么来修复错误。 谢谢 .................................................. ..................
CREATE PROCEDURE `ANULAR_FACTURA` (IN ID_FACTURA VARCHAR(25))
BEGIN
'Declaro las variables que voy a necesitar'
DECLARE COD_PRODUCTO INT DEFAULT 0;
DECLARE COD_DET_VENT INT DEFAULT 0;
DECLARE CANT_VENTA INT DEFAULT 0;
DECLARE CANT_ACTUAL INT DEFAULT 0;
DECLARE CANT_FINAL INT DEFAULT 0;
'Declaro el cursor y asigno valores del select'
DECLARE FACTURA_CURSOR CURSOR FOR
SELECT PR.ID, DV.CANTIDAD, DV.ID
FROM FACTURAS FA JOIN DETALLE_VENTAS DV ON(FA.ID=DV.FACTURA)
JOIN PRODUCTOS PR ON(DV.PRODUCTO=PR.ID)
WHERE FA.ID = ID_FACTURA;
'El HANDLER detecta el momento de parar cuando se recorrer el cursor'
DECLARE CONTINUE HANDLER FOR NOT FOUND SET @hecho = TRUE;
'Aperturo el cursor'
OPEN FACTURA_CURSOR;
'Comienzo el loop'
recorrido: LOOP
FETCH FACTURA_CURSOR INTO COD_PRODUCTO, CANT_VENTA, COD_DET_VENT;
'valido que no sea el ultimo registro'
IF @hecho THEN
LEAVE recorrido;
END IF;
'Busco la cantidad actual del producto en la tabla Producto'
SELECT INVENTARIO INTO CANT_ACTUAL
FROM PRODUCTO WHERE ID = COD_PRODUCTO;
'Sumo la cantidad que se habia vendido mas lo actual'
SET CANT_FINAL := CANT_ACTUAL + CANT_VENTA;
'Actualizo la tabla Producto, haciendo ya efectia la devolucion'
UPDATE PRODUCTO SET INVENTARIO = CANT_FINAL WHERE ID = COD_PRODUCTO;
'Elimino el detalle de la factura'
DELETE FROM DETALLE_VENTAS WHERE ID = COD_DET_VENT;
END LOOP recorrido;
'Cierro el cursor'
CLOSE FACTURA_CURSOR;
'Elimino la factura completa'
DELETE FROM FACTURAS WHERE ID = ID_FACTURA;
END
答案 0 :(得分:0)
我刚刚将评论语法从单引号更改为--
,并且有效:
delimiter $$
CREATE PROCEDURE `ANULAR_FACTURA` (IN ID_FACTURA VARCHAR(25))
BEGIN
-- Declaro las variables que voy a necesitar'
DECLARE COD_PRODUCTO INT DEFAULT 0;
DECLARE COD_DET_VENT INT DEFAULT 0;
DECLARE CANT_VENTA INT DEFAULT 0;
DECLARE CANT_ACTUAL INT DEFAULT 0;
DECLARE CANT_FINAL INT DEFAULT 0;
-- Declaro el cursor y asigno valores del select'
DECLARE FACTURA_CURSOR CURSOR FOR
SELECT PR.ID, DV.CANTIDAD, DV.ID
FROM FACTURAS FA JOIN DETALLE_VENTAS DV ON(FA.ID=DV.FACTURA)
JOIN PRODUCTOS PR ON(DV.PRODUCTO=PR.ID)
WHERE FA.ID = ID_FACTURA;
-- El HANDLER detecta el momento de parar cuando se recorrer el cursor'
DECLARE CONTINUE HANDLER FOR NOT FOUND SET @hecho = TRUE;
-- Aperturo el cursor'
OPEN FACTURA_CURSOR;
-- Comienzo el loop'
recorrido: LOOP
FETCH FACTURA_CURSOR INTO COD_PRODUCTO, CANT_VENTA, COD_DET_VENT;
-- valido que no sea el ultimo registro'
IF @hecho THEN
LEAVE recorrido;
END IF;
-- Busco la cantidad actual del producto en la tabla Producto'
SELECT INVENTARIO INTO CANT_ACTUAL
FROM PRODUCTO WHERE ID = COD_PRODUCTO;
-- Sumo la cantidad que se habia vendido mas lo actual'
SET CANT_FINAL := CANT_ACTUAL + CANT_VENTA;
-- Actualizo la tabla Producto, haciendo ya efectia la devolucion'
UPDATE PRODUCTO SET INVENTARIO = CANT_FINAL WHERE ID = COD_PRODUCTO;
-- Elimino el detalle de la factura'
DELETE FROM DETALLE_VENTAS WHERE ID = COD_DET_VENT;
END LOOP recorrido;
-- Cierro el cursor'
CLOSE FACTURA_CURSOR;
-- Elimino la factura completa'
DELETE FROM FACTURAS WHERE ID = ID_FACTURA;
END$$
delimiter ;