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

Inconsistent results querying temporary table in stored procedure

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

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          |

而如果我 return 只有一列 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,其中包含两个版本的存储过程。

我错过了什么?

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

中的 select 查询中使用声明的变量

检查您的 getAlarmTimestamps 过程中的以下行。

SELECT alarm_timestamp FROM alarm_clusters;

理想情况下,您应该使用不同名称的变量,而不是与 table 列变量相同的名称,以避免此类小错误。

变量 alarm_timestamp 具有您在光标中设置的最后一个值,该值显示 alarm_clusters [=29] 中行的总次数=]

希望本文能解决您的困惑