2016-08-19 20 views
0

基本的には、どこに終了する必要があるのか​​わかりませんでした。だから、エラーを修正するためにどこに配置しなければならないのかを教えてくれることを願ってください。 ありがとうございました ............................................... .....................ストアドプロシージャSQL構文:error missing '' end '

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

'区切り//'と最後の行が 'ENDになるととても最初の行を追加します。//' –

+0

ありがとうございます。しかし、まだそこにエラーがあります – robto09

+0

コードのコメントは#で前に置く必要があります(mysqlの1行コメント用) –

答えて

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 ; 
関連する問題