我正在做一些 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 子句),我可以看到正确的输出。
难道我做错了什么?我能得到任何建议吗?
提前致谢。