【发布时间】:2012-02-11 13:35:28
【问题描述】:
我通过发送以下查询 (MYSQL 5.0) 得到一个错误:
DELIMITER //
CREATE PROCEDURE relationTable ()
BEGIN
DECLARE articlecount int;
DECLARE keywordcount int;
DECLARE articlehits int;
DECLARE ac int DEFAULT 0;
DECLARE kc int;
DECLARE articleid int;
DECLARE word varchar(100);
DECLARE word_id int;
SET articlehits = 0;
SET articlecount = (SELECT count(id) from articles);
SET keywordcount = (SELECT count(id) from keywords);
outerloop: WHILE (ac < articlecount) DO
SET kc = 0;
SET articleid = (SELECT id from articles LIMIT 1 OFFSET ac);
innerloop: WHILE (kc < keywordcount) DO
IF (articlehits < 5) THEN
SELECT keyword, id INTO word, word_id from keywords LIMIT 1 OFFSET kc;
IF (0 < (SELECT COUNT(id) from articles WHERE id=articleid AND CONCAT(title, " ",text) REGEXP word)) THEN
INSERT INTO articles (id, articleID, keywordID, type) VALUES(NULL, articleid, word_id, 'type1');
SET articlehits = articlehits + 1;
END IF;
SET kc = kc + 1;
ELSE
SET kc = keywordcount;
END IF;
END WHILE innerloop;
SET ac = ac + 1;
END WHILE outerloop;
END;
//
DELIMITER ;
这会产生以下错误:
ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的 在 'LIMIT 1 OFFSET ac) 附近使用的语法;内环:WHILE(kc
知道为什么会这样吗?
(写这个来创建文章和关键字之间的关系表,以在文章视图中启用智能链接。)
【问题讨论】:
-
1.错误报告中奇怪的跳过是否来自单词 DO 和单词片段 TO 您问题的一部分?
-
2.您是否可能需要 SELECT INTO 用户定义的变量而不是声明的过程变量?
-
“用户定义”变量是什么意思?
-
是的,我也想知道这个错误输出的碎片
-
MySQL 具有@varname 形式的特定于连接的用户定义变量和您正在使用的类型的声明过程变量。根据我的程序经验,有时只允许其中一种类型,如果我没记错的话,其中一种情况可能是在选择 INTO 时。如果您想将其标记为正确,我会将其作为答案。
标签: mysql syntax-error procedure