我在存储过程中创建临时表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,其中包含两个版本的存储过程。
我错过了什么?
答案 0 :(得分:2)
您获得相同的时间戳,因为您在过程 alarm_timestamp
中的选择查询中使用了声明的变量检查getAlarmTimestamps过程中的以下行。
SELECT alarm_timestamp FROM alarm_clusters;
理想情况下,您应该使用不同的名称变量而不是表格列变量来避免这种小错误。
变量 alarm_timestamp 具有您在光标中设置的最后一个值,此值显示alarm_clusters表中行的总次数
我希望这能解决你的困惑