我的存储过程与游标不会运行

时间:2015-10-05 00:40:54

标签: mysql stored-procedures

这是我的查询。我正在遵循使用游标创建过程的所有步骤,但不起作用

    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

我的错误是什么?请

1 个答案:

答案 0 :(得分: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