0
我试图实现一个simple counter,它在SQL查询中的几个语句中作为参数传递(见下文)。我有以下的测试环境在存储的mysql过程中声明一个用作参数的变量
CREATE TABLE `test`.`TableA` (
`ColumnA` INT(3) NOT NULL ,
`ColumnB` INT(5) NOT NULL
) ENGINE = MYISAM ;
ALTER TABLE `TableA` ADD INDEX (`ColumnA`)
INSERT INTO `TableA` (`ColumnA`, `ColumnB`) VALUES
(2, 4654), (2, 223), (5, 12), (4, 32), (3, 23), (5, 21), (1, 2), (2, 2), (4, 2), (5, 1);
我想每个计数器迭代编号的输出文件(据我所知一个做到这一点的方法是使用存储过程)
CREATE PROCEDURE dowhile()
BEGIN
DECLARE CONT INT DEFAULT 5
WHILE CONT > 1 DO
BEGIN
SELECT TableA.ColumnB
INTO OUTFILE CONCAT('OUT', CONT)
FROM TableA
WHERE TableA.ColumnA = CONT
SET CONT = CONT - 1
END
END WHILE
END;
- 当我尝试执行我有一个语法错误,但我不知道 问题在哪里:“#1064 - 你的SQL语法错误; 检查手册,对应于你的MySQL服务器版本为 正确的语法使用NE ar'WHILE CONT> 1 DO BEGIN SELECT TableA.ColumnA INTO OUTFILE CONCAT('OUT''line 4“
- 如何执行此存储过程?
也许你错过了“;”在“END WHILE”的结尾处,并且可能也在其他一些行的末尾,例如,以“DECLARE”开头的行?当你尝试执行这个操作时,你是如何得到一个错误的,但是接下来你会问如何执行它?我很困惑:-)我会假设你用“CALL dowhile()”执行它。“ – miherrma
不,如果我放一个“;”在DECLARE行之后,我得到: - > BEGIN - > DECLARE CONT INT DEFAULT 5; 错误1064(42000):您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在第3行的''附近使用正确的语法。我正在将“脚本”粘贴到mysql解释器,mysql解释器有时通过将“;”有时通过使用CALL? ;) 谢谢 – user869097