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

bxfogqkk  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(380)

我正在创建一个临时表 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。
我错过了什么?

roqulrg3

roqulrg31#

因为在过程alarm\u timestamp内的select查询中使用了声明的变量,所以得到的时间戳是相同的
在getalarmtimestamps过程中检查下面的行。

SELECT alarm_timestamp FROM alarm_clusters;

理想情况下,应该使用不同的名称变量,而不是与表列变量相同的名称变量,以避免此类小错误。
变量alarm\u timestamp具有您在光标中设置的最后一个值,该值显示alarm\u clusters表中的行的总时间
我希望这能解决你的困惑

相关问题