在MySQL中使用Temp Table或Cursor时没有得到预期的输出

时间:2012-10-24 10:01:01

标签: mysql sql stored-procedures cursor temp-tables

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

以下是要点。

方法1 -

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

CREATE TEMPORARY TABLE XYZ(....);

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

执行此操作后,我只在临时表的几列中获取空值,并且所有其他临时表列都填充了正确的值

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

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

INSERT INTO XYZ  SELECT * FROM ABC WHERE clause;

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

方法2 -

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

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

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

我做错了吗?我可以就此提出任何建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我在方法#1中找到了问题。根本原因是变量名称用作IN参数之一。我使用了相同的IN变量名作为我的表列名。这就是为什么,我相信,它在某种程度上是在编写实际的表值。我改变了IN变量名,我的存储过程正确运行。