2015-10-05 2 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

Что моя ошибка? please

+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.

Смежные вопросы