【发布时间】:2012-12-05 14:17:17
【问题描述】:
我有一个如下的简单表格:
mysql> select * from version;
+----+---------+
| id | version |
+----+---------+
| 1 | 1 |
+----+---------+
1 row in set (0.00 sec)
我需要创建一个存储过程,它会根据该表的值(准确地说,该表的唯一行)做某事(或什么都不做)。
DELIMITER $$
DROP PROCEDURE IF EXISTS upgrade_version $$
CREATE PROCEDURE upgrade_version(current_version INTEGER, script TEXT)
BEGIN
DECLARE version INT(11);
SET version = (SELECT `version` FROM `version` WHERE `id` = 1 LIMIT 1);
SELECT version;
IF version = current_version + 1 THEN
PREPARE upgrade_stmt FROM script;
EXECUTE upgrade_stmt;
UPDATE `version` SET `version` = `version` + 1 WHERE `id` = 1;
ENDIF;
END $$
DELIMITER ;
在以下时间内被调用:
CALL upgrade_version(1,'ALTER TABLE ...');
语法错误,mysql返回:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'script;
EXECUTE upgrade_stmt;
UPDATE `version` SET `version` = `version`' at line 7
怎么了?
【问题讨论】:
-
您在过程定义或尝试调用时收到此消息?
-
定义过程时出现此错误。