【问题标题】:Not getting expected output while using Temp Table or Cursor in MySQL在 MySQL 中使用 Temp Table 或 Cursor 时没有得到预期的输出
【发布时间】: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


【解决方案1】:

我在方法 1 中发现了问题。根本原因是用作 IN 参数之一的变量名。我使用了与我的表列名相同的 IN 变量名。这就是为什么,我相信,不知何故,它是在写实际的表值。我更改了 IN 变量名,并且我的存储过程正确运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2019-09-16
    相关资源
    最近更新 更多