【问题标题】:(what I suspect is a very simple) q about Cursor For Loop(我怀疑是一个非常简单的)q 关于 Cursor For Loop
【发布时间】:2014-04-18 22:46:30
【问题描述】:

刚刚学习了 PL/SQL 和 Oracle SQL Developer,仍然对语法有所了解。我创建了一个 select 语句和一个 Cursor For 循环。 select 语句检索了一堆东西,包括 AVG(USAGE),我正在编写将其插入到不同的表中。

基本上没有问题,但我不知道在 INSERT 语句中插入 AVG(USAGE) 的语法。


v_dayNumber NUMBER;

CURSOR c_nonPublicHoliday is SELECT STREET, SUBURB, DAY, AVG(VOLUME)
                             FROM RAW_TABLE, HOLIDAYS
                             WHERE  to_char(day, 'd') = v_dayNumber
                             AND RAW_TABLE IN (SELECT HOLIDAY_DATE FROM HOLIDAYS)
                             GROUP BY STREET, SUBURB, DAY
                             ORDER BY DAY;

BEGIN

FOR v_forecastDay IN 1..14 LOOP

    v_dayNumber := v_forecastDay;

    FOR R1 IN c_nonPublicHoliday LOOP

    INSERT INTO LOCAL_TABLE(STREET,SUBURB,DAY)
    VALUES (R1.STREET, R1.SUBURB, R1.DAY);

  END LOOP;

END LOOP;

END;

基本上我所做的只是循环通过接下来的 14 天并检索一周中那一天的历史平均使用量(我自己知道,7 天会达到相同的效果,但还有其他事情发生)。只需将该平均值写入此 LOCAL_TABLE,但我不确定所需的语法

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:

    尽管可以在查询中不提供别名的情况下引用计算的平均值,但这会产生非常不可读且难以维护的代码。实际上,您想在查询中添加别名(在本例中为avg_volume

    CURSOR c_nonPublicHoliday is SELECT STREET, SUBURB, DAY, AVG(VOLUME) avg_volume
    

    然后在您的 INSERT 语句中使用该别名

    INSERT INTO LOCAL_TABLE(STREET, SUBURB, DAY, AVG_VOLUME)
    VALUES (R1.STREET, R1.SUBURB, R1.DAY, r1.avg_volume);
    

    【讨论】:

    • 啊,当然!非常感谢。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 2014-06-02
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多