2016-08-25 2 views
1

오류를 찾을 수 없습니다. 너 나 좀 도와 줄 수있어?MySql 오류 코드 : 1064

DELIMITER $$ 
CREATE PROCEDURE ReadBalance (IN mes INT,IN anio INT) 
BEGIN 

DECLARE rowid INT; 
DECLARE entity INT; 
DECLARE grupo VARCHAR(100); 
DECLARE relacion INT; 
DECLARE ini INT; 
DECLARE fin INT; 
DECLARE tipo INT; 
DECLARE detalle INT; 
DECLARE ctain INT; 
DECLARE ctaen INT; 
DECLARE debe DECIMAL(17,2); 
DECLARE haber DECIMAL(17,2); 
DECLARE saldo DECIMAL(17,2); 
DECLARE done INT DEFAULT 0; 

CREATE TEMPORARY TABLE Balance (
    rowid INT NOT NULL 
    , entity TINYINT NOT NULL DEFAULT 0 
    , grupo VARCHAR(150) NOT NULL 
    , relacion INT UNSIGNED NOT NULL DEFAULT 0 
    , ini INT UNSIGNED NOT NULL DEFAULT 0 
    , fin INT UNSIGNED NOT NULL DEFAULT 0 
    , tipo INT UNSIGNED NOT NULL DEFAULT 1 
    , detalle INT UNSIGNED NOT NULL DEFAULT 0 
    , ctain INT UNSIGNED NOT NULL DEFAULT 0 
    , ctaen INT UNSIGNED NOT NULL DEFAULT 0 
    , debe DECIMAL(12,2) NOT NULL DEFAULT 0.00 
    , haber DECIMAL(12,2) NOT NULL DEFAULT 0.00 
    , saldo DECIMAL(12,2) NOT NULL DEFAULT 0.00 
) ENGINE=MEMORY; 

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

DECLARE cur1 CURSOR FOR 
SELECT 
    g.`rowid`, 
    g.`entity`, 
    g.`grupo`, 
    g.`fk_codagr_rel`, 
    g.`fk_codagr_ini`, 
    g.`fk_codagr_fin`, 
    g.`tipo_edo_financiero`, 
    g.`Detalle`, 
    ctai.`cta`, 
    ctae.`cta` 
FROM 
    `llx_contab_grupos` g 
    INNER JOIN `llx_contab_cat_ctas` ctai 
    ON ctai.`rowid` = g.`fk_codagr_ini` 
    INNER JOIN llx_contab_cat_ctas ctae 
    ON ctae.`rowid` = g.`fk_codagr_fin` ; 



OPEN cur1; 
read_loop: LOOP 
FETCH cur1 INTO rowid, entity, grupo,relacion, ini,fin,tipo,detalle,ctain,ctaen; 

    IF done =1THEN 
     LEAVE read_loop; 
    END IF; 

    SELECT debe := SUM(d.`debe`), haber:= SUM(d.`haber`) FROM `llx_contab_polizasdet` d 
    INNER JOIN llx_contab_polizas e ON e.`rowid` = d.`fk_poliza` 
    WHERE e.`anio` = anio 
    AND e.`mes` = mes 
    AND d.`cuenta` >= ctain 
    AND d.`cuenta` <= ctaen 
    ; 

    saldo = debe-haber; 
INSERT INTO Balance (
    rowid, 
    entity, 
    grupo, 
    relacion, 
    ini, 
    fin, 
    tipo, 
    detalle, 
    ctain, 
    ctaen, 
    debe, 
    haber, 
    saldo 
) 
VALUES 
    (
    rowid, 
    entity, 
    grupo, 
    relacion, 
    ini, 
    fin, 
    tipo, 
    detalle, 
    ctain, 
    ctaen, 
    debe, 
    haber, 
    saldo 
) ; 



END LOOP read_loop; 
CLOSE cur1; 

SELECT * FROM Balance; 

END$$ 

DELIMITER ; 

오류 메시지 : 실행

1 쿼리, 0 성공 1 오류, 0 경고

검색어 :

CREATE PROCEDURE ReadBalance (IN mes INT,IN anio INT) BEGIN DECLARE rowid INT; 
DECLARE entity INT; 
DECLARE grupo VARCHAR(100); D... 

오류 코드 : 1064 당신은 오류가 귀하의 SQL 구문; 올바른 구문이 'DECLARE CONTINUE HANDLER FOR NOT FOUND SET done'근처에서 사용하도록 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오. done = 1;

DECLARE cur1 CURSOR FOR 
SE' at line 32 

Execution Time : 0 sec 
Transfer Time : 0 sec 
Total Time  : 0 sec 
+0

아마도 커서 선언에 ctai.ctct', ctae.'cta'에는 별칭이 있어야 동일한 이름이 존재하지 않을 수 있습니다. – xQbert

+0

참조 : http://stackoverflow.com/a/23515348/3682162 – Vikrant

답변

0

나는이를 만들고, 제대로 작동;

DELIMITER $$ 

USE `tindustrial`$$ 

DROP PROCEDURE IF EXISTS `Cur`$$ 

CREATE DEFINER = `root` @`localhost` PROCEDURE `Cur`() 
BEGIN 
    DECLARE rowid INT ; 
    DECLARE entity INT ; 
    DECLARE grupo VARCHAR (100) ; 
    DECLARE relacion INT ; 
    DECLARE ini INT ; 
    DECLARE fin INT ; 
    DECLARE tipo INT ; 
    DECLARE detalle INT ; 
    DECLARE ctain INT ; 
    DECLARE ctaen INT ; 
    DECLARE debe DECIMAL (17, 2) ; 
    DECLARE haber DECIMAL (17, 2) ; 
    DECLARE saldo DECIMAL (17, 2) ; 
    DECLARE no_more_rows BOOLEAN ; 
    DECLARE cur_B CURSOR FOR 
    SELECT 
    g.rowid, 
    g.entity, 
    g.grupo, 
    g.fk_codagr_rel, 
    g.fk_codagr_ini, 
    g.fk_codagr_fin, 
    g.tipo_edo_financiero, 
    g.Detalle, 
    ctai.cta, 
    ctae.cta 
    FROM 
    llx_contab_grupos g 
    INNER JOIN llx_contab_cat_ctas ctai 
     ON ctai.rowid = g.fk_codagr_ini 
    INNER JOIN llx_contab_cat_ctas ctae 
     ON ctae.rowid = g.fk_codagr_fin ; 

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = 1 ; 

    CREATE TEMPORARY TABLE Balance (
    rowid INT NOT NULL, 
    entity TINYINT NOT NULL DEFAULT 0, 
    grupo VARCHAR (150) NOT NULL, 
    relacion INT UNSIGNED NOT NULL DEFAULT 0, 
    ini INT UNSIGNED NOT NULL DEFAULT 0, 
    fin INT UNSIGNED NOT NULL DEFAULT 0, 
    tipo INT UNSIGNED NOT NULL DEFAULT 1, 
    detalle INT UNSIGNED NOT NULL DEFAULT 0, 
    ctain INT UNSIGNED NOT NULL DEFAULT 0, 
    ctaen INT UNSIGNED NOT NULL DEFAULT 0, 
    debe DECIMAL (12, 2) NOT NULL DEFAULT 0.0, 
    haber DECIMAL (12, 2) NOT NULL DEFAULT 0.0, 
    saldo DECIMAL (12, 2) NOT NULL DEFAULT 0.0 
) ENGINE=MEMORY; 

    OPEN cur_b ; 
    the_loop : 
    LOOP 
    FETCH cur_B INTO rowid, 
    entity, 
    grupo, 
    relacion, 
    ini, 
    fin, 
    tipo, 
    detalle, 
    ctain, 
    ctaen ; 
    IF no_more_rows 
    THEN CLOSE cur_b ; 
    LEAVE the_loop ; 
    END IF ; 
    END LOOP the_loop ; 
    CLOSE cur_b ; 
    TRUNCATE TABLE Balance ; 
END $$ 

DELIMITER ;