MySQL INSERT查询无法在存储过程中使用

时间:2014-05-19 18:15:58

标签: mysql mysql-error-1064

我已经陷入困境几个小时了。我正在MYSQL中构建一个存储过程,在新物理表中有很多Insert。以下只是我无法在MySQL服务器上运行的示例。

DROP PROCEDURE IF EXISTS `someProc`$$

CREATE DEFINER=`test`@`%` PROCEDURE `someProc`()
BEGIN


DROP TABLE IF EXISTS table1;

SET @SQL1 = '   CREATE TABLE `table1` (`last_updated` INT); 

                INSERT INTO `table1` (`last_updated`)
                VALUES (1); ';
-- select @SQL1;


PREPARE stmt2 FROM @SQL1;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;

END$$

DELIMITER ;

调用存储过程后,我得到一个MySQL错误代码1064,表示'INSERT INTO table1 ( last_updated )周围存在错误。

但我可以将分配给@ SQL1变量的String内容作为有效的MySQL查询运行,并获取创建的表以及插入其中的值。我已经搜索了错误代码,并且正如博客/文档页面中所建议的那样,我不认为我在这里使用保留关键字,也没有插入任何不兼容的数据类型。它是简单的SQL,它在存储过程设置之外工作,但在proc中失败。任何人都能解释一下吗?

1 个答案:

答案 0 :(得分:1)

prepare准备一份陈述。这在documentation

中很明显
  

文本必须代表单个陈述,而不是多个陈述。

您需要将这两个操作拆分为两个不同的语句。