2015-10-05 45 views
0

這是我的查詢。我下面的所有步驟來創建光標的操作,但是不工作我的存儲過程與遊標不運行

CREATE PROCEDURE `sp_prueba1` (
codigo1 int, 
estado1 int, 
llave_maestra1 char(10), 
fecha_actual1 date, 
rango_inicial1 varchar(20), 
rango_final1 varchar(20)) 
BEGIN 
    DECLARE est1 int; 
    DECLARE conteo1 int; 
    /*Abro cursor*/ 
    DECLARE cur1 CURSOR FOR SELECT Oel_Estado FROM  Operaciones_Especiales_Llave WHERE Em_Codigo=codigo1; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 
    OPEN cur1; 
    /*INICIO LOOP*/ 
    read_loop: LOOP 
     FETCH cur1 INTO est1; 
        IF done THEN 

         LEAVE read_loop; 

        ELSE 

         SELECT conteo1,finicio1,ffin1,cod1,est1; 

        END IF; 
     END LOOP; 
    /*FIN LOOP*/ 
     CLOSE cur1; 
    /*CIERRO CURSOR*/  
END 

enter image description here

什麼是我的錯?請

+0

嘗試註釋掉一些行來確定語法錯誤在哪一行。 – Dijkgraaf

回答

0

看起來你好像缺少你的Delimiters

如果使用mysql客戶端程序定義包含分號字符的存儲程序,則會出現問題。默認情況下,mysql本身將分號識別爲語句分隔符,因此您必須臨時重新定義分隔符以使mysql將整個存儲的程序定義傳遞給服務器。要重新定義mysql分隔符,請使用delimiter命令。

Delimiter // 

    CREATE PROCEDURE `sp_prueba1` (
codigo1 int, 
estado1 int, 
llave_maestra1 char(10), 
fecha_actual1 date, 
rango_inicial1 varchar(20), 
rango_final1 varchar(20)) 
BEGIN 
    DECLARE est1 int; 
    DECLARE conteo1 int; 
    /*Abro cursor*/ 
    DECLARE cur1 CURSOR FOR SELECT Oel_Estado FROM  Operaciones_Especiales_Llave WHERE Em_Codigo=codigo1; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 
    OPEN cur1; 
    /*INICIO LOOP*/ 
    read_loop: LOOP 
     FETCH cur1 INTO est1; 
        IF done THEN 

         LEAVE read_loop; 

        ELSE 

         SELECT conteo1,finicio1,ffin1,cod1,est1; 

        END IF; 
     END LOOP; 
    /*FIN LOOP*/ 
     CLOSE cur1; 
    /*CIERRO CURSOR*/  
END 

Delimiter; 

今後請參考Dev.mysql