【发布时间】:2011-01-06 13:05:50
【问题描述】:
我第一次尝试创建光标。我查看了文档,我理解了这个概念,但我似乎无法让它被声明......
我正在使用:
- MySql 5.1.41
- SqlYog 担任经理
- (在 xampp 安装上本地运行)
即使复制粘贴http://dev.mysql.com/doc/refman/5.1/en/cursors.html 中的示例
CREATE PROCEDURE curdemo()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
OPEN cur2;
read_loop: LOOP
FETCH cur1 INTO a, b;
FETCH cur2 INTO c;
IF done THEN
LEAVE read_loop;
END IF;
IF b < c THEN
INSERT INTO test.t3 VALUES (a,b);
ELSE
INSERT INTO test.t3 VALUES (a,c);
END IF;
END LOOP;
CLOSE cur1;
CLOSE cur2;
END;
我马上得到错误: 错误代码:1064
您的 SQL 语法有错误; 检查对应的手册 您的 MySQL 服务器版本 在第 3 行的 '' 附近使用正确的语法
还有很多其他人跟随,
这对我来说没有任何意义,请任何好心人帮助我吗?
谢谢
所以我让示例查询工作(感谢 ajreal),并重置了 DELIMITER。但是当我运行我的查询时:
DELIMITER##
CREATE PROCEDURE RetiraPoints()
BEGIN
DECLARE userid BIGINT;
DECLARE done INT DEFAULT 0;
DECLARE cur CURSOR FOR SELECT uid FROM viewpoints;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
read_loop: LOOP
FETCH cur INTO userid;
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO points (iduser, points, pointcat) VALUES (uid, -1, 1), (userid, -1, 2), (userid, -1, 3), (userid, -1, 4), (userid, -1, 5), (userid, -1, 6);
END LOOP;
CLOSE cur;
END;##
我得到: 错误代码:1064
您的 SQL 语法有错误; 检查对应的手册 您的 MySQL 服务器版本 在 'DECLARE done 附近使用正确的语法 INT 默认值 0;声明当前光标为 从视点中选择 uid; ' 在行 1
天哪,这太难了……
【问题讨论】:
-
我在创建它们时一直收到该错误。太愚蠢了,原来我没有创建程序的权限。除非您以 root 身份登录,否则您需要指定创建之前创建的每个过程的名称并授予对它的访问权限。好傻
-
是的,但我是以 root 身份登录的,这是我的个人安装
-
需要在分隔符后面放一个空格,而结尾
END不需要;
标签: mysql mysql-error-1064 database-cursor