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

Shi*_*ade 6 mysql sql stored-procedures temp-tables cursor

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

以下是要点.

方法1 -

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

CREATE TEMPORARY TABLE XYZ(....);

INSERT INTO XYZ (....) SELECT (....) FROM ABC WHERE clause;
Run Code Online (Sandbox Code Playgroud)

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

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

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

INSERT INTO XYZ  SELECT * FROM ABC WHERE clause;
Run Code Online (Sandbox Code Playgroud)

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

方法2 -

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

DECLARE cur1 CURSOR FOR SELECT (....) FROM ABC WHERE clause;
Run Code Online (Sandbox Code Playgroud)

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

难道我做错了什么?我可以就此得到任何建议吗?

提前致谢.

Shi*_*ade 1

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