6

我正在做一些 POC。我在 MySQL 中编写了一个存储过程。我正在使用 MySQLWorkbench 进行数据库操作,例如创建新表、存储过程、查询执行等。我观察到一些意外的执行行为,即使代码在语法和逻辑上看起来都是正确的。

以下是要点。

方法 1 -

在第一种方法中,我正在创建临时表并使用带有选定列的 INSERT INTO ...SELECT 语句添加记录。

CREATE TEMPORARY TABLE XYZ(....);

INSERT INTO XYZ (....) SELECT (....) FROM ABC WHERE clause;

这样做之后,我只在临时表的几列中获得空值,并且所有其他临时表列都填充了正确的值

如果我在单独的 SQL 选项卡中运行相同的选择语句(对于相同的 where 子句),即使对于在临时表中获得空值的那几列,我也可以看到正确的输出。

如果我用*(所有列)更改上面的 INSERT INTO..SELECT 语句,那么我在临时表中得到正确的输出..

INSERT INTO XYZ  SELECT * FROM ABC WHERE clause;

但不希望所有列。我还尝试使用 ENGINE = value 创建临时表。但是没有用。即使我用普通表(没有临时表)尝试了所有这些方法,但不幸的是

方法 2 -

在第二种方法中,我用游标而不是临时表修改了相同的存储过程。但即使在这种情况下,游标也没有得到任何记录。

DECLARE cur1 CURSOR FOR SELECT (....) FROM ABC WHERE clause;

如果我在单独的 SQL 选项卡中运行相同的选择语句(对于相同的 where 子句),我可以看到正确的输出。

难道我做错了什么?我能得到任何建议吗?

提前致谢。

4

1 回答 1

1

我已经在方法 #1 中发现了问题。根本原因是用作 IN 参数之一的变量名。我使用了与我的表列名相同的 IN 变量名。这就是为什么,我相信,不知何故,它是在写实际的表值。我更改了 IN 变量名,并且我的存储过程正确运行。

于 2013-01-26T07:15:30.440 回答