【发布时间】:2012-10-24 10:01:01
【问题描述】:
我正在做一些 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 创建临时表。但是没有用。即使我用普通表(没有临时表)尝试了所有这些方法,但不幸的是
方法 2 -
在第二种方法中,我用游标修改了相同的存储过程 而不是临时表。但即使在这种情况下,光标也没有得到任何记录。
DECLARE cur1 CURSOR FOR SELECT (....) FROM ABC WHERE clause;
如果我在单独的 SQL 选项卡中运行相同的选择语句(对于相同的 where 子句),我可以看到正确的输出。
我做错了吗?我能得到任何建议吗?
提前致谢。
【问题讨论】:
-
能否显示您在 SELECT 语句中选择的列,以及源表和临时表的表结构?没有它很难看到会发生什么。
-
感谢 Schmitz 回来。我很抱歉回复晚了。实际上,我已经在方法 1 中发现了问题。根本原因是用作 IN 参数之一的变量名。我使用了与我的表列名相同的 IN 变量名。这就是为什么,我相信,不知何故,它是在写实际的表值。我更改了 IN 变量名,并且我的存储过程正确运行。感谢您的帮助。
-
请将此作为答案发布并接受,这样您的问题就不再显示为待处理。
标签: mysql sql stored-procedures temp-tables database-cursor