代码之家  ›  专栏  ›  技术社区  ›  BBQ Snags

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

  •  1
  • BBQ Snags  · 技术社区  · 7 年前

    我正在创建临时表 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 回复  |  直到 7 年前
        1
  •  2
  •   Alpesh Jikadra    7 年前

    您将获得相同的时间戳,因为您在过程内的select查询中使用声明的变量 alarm\u时间戳

    检查getAlarmTimestamps过程中的下一行。

    SELECT alarm_timestamp FROM alarm_clusters;
    

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

    变量 alarm\u时间戳 具有您在光标中设置的最后一个值,该值显示alarm\u clusters表中的行的总时间

    我希望这能解决你的困惑