查询存储过程中临时表的结果不一致

时间:2018-04-14 04:54:55

标签: mysql stored-procedures database-cursor

我在存储过程中创建临时表alarm_clusters。如果我通过SELECT * FROM alarm_clusters返回结果,我会得到预期的结果集:

id |alarm_timestamp     |alarm_rule_id |sensor_id |cluster_duration |time_delta |cluster_id |
---|--------------------|--------------|----------|-----------------|-----------|-----------|
1  |2018-01-01 00:00:00 |1             |1         |60               |0          |1          |
2  |2018-01-01 00:02:00 |1             |1         |60               |120        |2          |
3  |2018-01-01 00:02:20 |1             |1         |60               |20         |2          |

如果我只返回一列SELECT alarm_timestamp FROM alarm_clusters;,我会在最后一行重复该列的值:

alarm_timestamp     |
--------------------|
2018-01-01 00:02:20 |
2018-01-01 00:02:20 |
2018-01-01 00:02:20 |

我创建了一个DB Fiddle,其中包含两个版本的存储过程。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

您获得相同的时间戳,因为您在过程 alarm_timestamp

中的选择查询中使用了声明的变量

检查getAlarmTimestamps过程中的以下行。

SELECT alarm_timestamp FROM alarm_clusters;

理想情况下,您应该使用不同的名称变量而不是表格列变量来避免这种小错误。

变量 alarm_timestamp 具有您在光标中设置的最后一个值,此值显示alarm_clusters表中行的总次数

我希望这能解决你的困惑