这是我的查询。我正在遵循使用游标创建过程的所有步骤,但不起作用
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
我的错误是什么?请
答案 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。