【发布时间】:2014-08-01 05:31:56
【问题描述】:
我正在为我们的迁移功能创建一个 sql 脚本。我们希望将数据从一个 magento 实例迁移到另一个(使用纯 SQL,因为 magento 的导入/导出非常有限)。
其中一个挑战是我想动态地更改表的 AUTO_INCREMENT 值,因此不需要在多个步骤中手动完成。我想将 AUTO_INCREMENT 值设置为对应列的当前最大值 + 1。
我为此准备了以下存储过程:
DELIMITER $$
CREATE PROCEDURE alter_auto_inc_customer()
BEGIN
SELECT @max := MAX(entity_id)+ 1 FROM customer_entity;
PREPARE stmt FROM 'ALTER TABLE customer_entity AUTO_INCREMENT = ?';
EXECUTE stmt USING @max;
END $$
这个命令运行流畅。之后该过程应该只通过一个简单的语句来调用:
CALL alter_auto_inc_customer();
当我执行“调用”语句时,我得到一个 1064 语法错误。这可能是微不足道的,但我一生都无法弄清楚......
ERROR 1064 (42000): 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 '?' at line 1
有人知道问题是什么吗?
我需要将其放入一个或多个存储过程中,因为我需要能够为数据库中的多个表运行类似的语句。
【问题讨论】:
标签: mysql stored-procedures prepared-statement parameter-passing mysql-error-1064