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

标签 mysql sql stored-procedures

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

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 ;

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

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:

我用分号纠正了错误,谢谢@Daniel Victoria

但现在我遇到以下错误:

Error code 1267, SQL state HY000: Illegal mix of collations (latin1_spanish_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='

当我这样做时,我确实犯了这个错误

SELECT DISTINCT e.claseDocIdentidadFallecido 
            FROM EstadisticoRD e  WHERE ...  AND e.codOficina=codigoEntidad;

为什么当我执行e.codOficina=codigoEntidad时出现此错误,如何修复它?

更新2:

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

在本例中,新查询是:

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;

我希望以最好的方式完成这个过程。

最佳答案

“END IF”后面缺少分号 (;)

关于mysql - mysql存储过程中的参数sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20754426/

相关文章:

mysql - 无法使用Spring data JPA提取mysql的json列

mysql - 从列名中删除后缀

c# - 使用 Entity Framework 5 从 oracle 包导入程序

php - 仅提取尚未插入链接表的值

mySQL 的 Java Applet 问题

sql - 使用增量记录创建基于 SQL 查询的每日报告

sql - 动态索引创建 - SQL Server

mysql - 允许用户可以查看其他用户创建的存储过程

java - 使用 JDBC 调用 sql server 存储过程时出现 java.lang.NullPointerException

mysql - Sql 删除具有复合主键的孤立记录