MySQL INSERT 查询在存储过程中不起作用

问题描述 投票:0回答:2

我已经被一个问题困扰了好几个小时了。我正在 MYSQL 中构建一个存储过程,并在新的物理表中进行大量插入。以下只是一个示例,我无法在我的 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 变量的字符串内容作为有效的 MySQL 查询运行,并获取创建的表以及插入其中的值。我已经在谷歌上搜索了错误代码,并且按照博客/文档页面中的建议,我认为我没有在这里使用保留关键字,也没有插入任何不兼容的数据类型。它是简单的 SQL,可以在存储过程设置之外工作,但在过程内部会严重失败。有人可以透露一些信息吗?

mysql mysql-error-1064
2个回答
1
投票

prepare
准备一份声明。这在文档中很清楚:

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

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


0
投票

使用商业智能; 删除程序 VCInplantFactProcedure; 分隔符 // 创建过程 VCInplantFactProcedure() 开始
插入fact_vcinplant_table(trip_id,dw_loader_id,dw_packer_id) 选择 ts.trip_id、dl.dw_loader_id、dp.dw_packer_id 从 tbl_ap_trip_stagging ts left joinDimension_loader dl on ts.loader_id=dl.loader 在 ts.packer_id=dp.packer 上左连接Dimension_packer dp;

结束// 分隔符;

选择插入通过存储过程正常工作在我的sql中不起作用 请帮忙

© www.soinside.com 2019 - 2024. All rights reserved.