首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存储过程mysql中的参数sql查询

存储过程mysql中的参数sql查询
EN

Stack Overflow用户
提问于 2013-12-24 03:23:25
回答 1查看 488关注 0票数 0

我正在mysql中使用存储过程,所以我有以下过程:

代码语言:javascript
运行
复制
DELIMITER @@
DROP PROCEDURE IF EXISTS generarEstadisticoRD @@
CREATE PROCEDURE generarEstadisticoRD ( mesInicial INT,anualInicial INT, mesFinal INT,anualFinal INT, codigoEntidad CHAR(3),mes INT )

BEGIN
    DECLARE controlador INT;
    DECLARE tipoDocumento CHAR(2);

    DECLARE cursorDocumentos CURSOR FOR SELECT DISTINCT e.claseDocIdentidadFallecido 
            FROM EstadisticoRD e  WHERE e.anual>=anualInicial AND e.anual<=anualFinal  
            AND  e.mes >=mesInicial AND e.mes<=mesFinal AND e.codOficina=codigoEntidad;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET controlador = 1;

    DROP TEMPORARY TABLE IF EXISTS estadistico;
    CREATE TEMPORARY TABLE IF NOT EXISTS 
    estadistico( TIPO CHAR(2), MES INT );

    OPEN cursorDocumentos;

    cursorLoop : LOOP
        FETCH cursorDocumentos INTO tipoDocumento;
        IF( controlador=1 ) THEN
            LEAVE cursorLoop;
        END IF 

        /**
          *Lógica
          */
        INSERT INTO estadistico(`TIPO`,`MES`) 
            SELECT DISTINCT 
                c.descripcion, 
                IFNULL( (SELECT e.numRegistrosReportados FROM estadisticoRD e WHERE e.codOficina=codigoEntidad
                    AND e.claseDocIdentidadFallecido=tipoDocumento AND e.mes=mes ), 0)
            FROM estadisticoRD e, claseDoc c WHERE e.codOficina=codigoEntidad AND e.claseDocIdentidadFallecido=tipoDocumento
            AND c.claseDoc = e.claseDocIdentidadFallecido;

    END LOOP cursorLoop;
    CLOSE cursorDocumentos;
    SELECT * FROM estadistico;
END @@ 
DELIMITER ;

当我试图执行该过程时,我会收到以下消息:

代码语言:javascript
运行
复制
Executed successfully in 0,001 s, 0 rows affected.
Line 2, column 1

Error code 1064, SQL state 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO estadistico(`TIPO`,`MES`) 
        SELECT DISTINCT c.descripcion, 
 ' at line 24
Line 3, column 1

那么,我做错什么了?

更新1:

我用分号纠正了错误谢谢丹尼尔·维多利亚

但现在我犯了以下错误:

代码语言:javascript
运行
复制
Error code 1267, SQL state HY000: Illegal mix of collations (latin1_spanish_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='

当我这样做的时候,我就会犯这个错误

代码语言:javascript
运行
复制
SELECT DISTINCT e.claseDocIdentidadFallecido 
            FROM EstadisticoRD e  WHERE ...  AND e.codOficina=codigoEntidad;

为什么当我做e.codOficina=codigoEntidad时我会犯这个错误,如何纠正它?

更新2:

要解决这个问题,我需要将COLLATE latin1_swedish_ci放在有错误的列后面。

在这种情况下,新的查询是:

代码语言:javascript
运行
复制
SELECT DISTINCT * 
            FROM estadisticoRD e  WHERE e.anual>=anualInicial AND e.anual<=anualFinal  
            AND  e.mes >=mesInicial AND e.mes<=mesFinal AND e.codOficina  = codigoEntidad COLLATE latin1_swedish_ci;

我希望能以最好的方式完成这个手术。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-24 03:29:52

在“结束IF”之后缺少分号(;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20754426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档