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子句),我可以看到正确的输出.
难道我做错了什么?我可以就此得到任何建议吗?
提前致谢.
我已经在方法#1 中找到了问题所在。根本原因是用作 IN 参数之一的变量名称。我使用了与表列名称相同的 IN 变量名称。我相信,这就是为什么它以某种方式超过了写入实际的表值。我更改了 IN 变量名称,并且我的存储过程运行正确。