2013-12-24 113 views
0

我在MySQL存儲程序工作的內部SQL查詢,所以我有以下程序:參數的存儲過程的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維多利亞

但現在我得到以下錯誤:

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; 

我希望能完成這個過程的最佳途徑。

回答

1

你缺少一個分號(;)之後的「END IF」

+0

維多利亞,現在我有以下錯誤,當我嘗試調用程序'錯誤代碼1267,SQL狀態HY000:排序規則的非法組合( latin1_spanish_ci,IMPLICIT)和(latin1_swedish_ci,IMPLICIT)用於操作'=''它可能是什麼? –