【问题标题】:Can't figure out why my second count variable isn't counting PL/SQL无法弄清楚为什么我的第二个计数变量不计算 PL/SQL
【发布时间】:2017-09-27 04:09:42
【问题描述】:
SET SERVEROUTPUT ON

DECLARE
    v_ans        testloop.ctr%TYPE := 0;
    v_ct         testloop.rec_no%TYPE := 1;
    v_ans1       NUMBER := 0;
    v_ctin       NUMBER := 1;
BEGIN
    WHILE v_ct < 5 LOOP
        WHILE v_ctin < 5 LOOP
            v_ans := v_ct + v_ctin;
            dbms_output.put_line(v_ct || ' + ' || v_ctin || ' = ' || v_ans);
            v_ctin := v_ctin + 1;
        END LOOP;
        v_ct := v_ct + 1;
    END LOOP;
END;
/
SET SERVEROUTPUT OFF

有人对原因有什么建议吗? 如果不清楚,我只是想得到这样的输出:

1+1 = 2、1 + 2 = 3、1 + 3 = 4、2 + 1 = 3 等等

非常感谢您的帮助。

【问题讨论】:

    标签: sql oracle plsql while-loop nested


    【解决方案1】:

    需要在外循环中重新初始化变量:

    BEGIN
       WHILE v_ct < 5 LOOP
            v_ctin := 1;
    --------^
            WHILE v_ctin < 5 LOOP
                 v_ans := v_ct + v_ctin;
                    dbms_output.put_line(v_ct || ' + ' || v_ctin || ' = ' || v_ans);
             v_ctin := v_ctin + 1;
            END LOOP;
        v_ct := v_ct + 1;
       END LOOP;
    END;
    

    【讨论】:

    • 非常感谢,成功了。问题,我为什么要重新初始化它?
    • @user7823016 - 如果您不为外循环的每次迭代将第二个计数器重置为 1,那么将它设置回 1 的原因是什么?在内部循环的每次迭代中,您只需将其增加 1;如果在外循环继续进行下一次迭代时不重置它,第二个计数器将继续增加(但您对内循环有条件,因此实际上不会进行进一步的迭代)。
    猜你喜欢
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    相关资源
    最近更新 更多