CONTINUE WHEN 示例解释 - Oracle SQL

CONTINUE WHEN example explanation - Oracle SQL

您好,我正在尝试解释以下示例的结果,但我不明白为什么。希望有人能为我阐明它。谢谢

Code + Result

DECLARE 
 v_total NUMBER := 0;
BEGIN
 <<BeforeTopLoop>>
 FOR i IN 1..10 LOOP
   v_total := v_total + 1;
   dbms_output.put_line('Total is: ' || v_total);
   FOR j IN 1..10 LOOP
     CONTINUE BeforeTopLoop WHEN i + j > 5;
     v_total := v_total + 1;
   END LOOP;
 END LOOP;
END two_loop;

<<BeforeTopLoop>> 是一个标签,可以作为某些流量控制操作的目标,例如 CONTINUE.

在下面的示例中,它只是有条件地缩短内循环并将控制转移到外循环的顶部,同时保持变量的当前状态。

要公开 total 的状态更改,请参阅以下建议。

尝试按以下方式调整程序,然后重新运行。

您会注意到内部循环如何在不触及外部 put_line 语句的情况下增加总数。

DECLARE 
 v_total NUMBER := 0;
BEGIN
 <<BeforeTopLoop>>
 FOR i IN 1..10 LOOP
   v_total := v_total + 1;
   dbms_output.put_line('Total is: ' || v_total);
   FOR j IN 1..10 LOOP
     CONTINUE BeforeTopLoop WHEN i + j > 5;
     v_total := v_total + 1;
     dbms_output.put_line('Intermediate is: ' || v_total);   -- Try adding this line and run again
   END LOOP;
 END LOOP;
END two_loop;

结果:

Total is: 1
Intermediate is: 2
Intermediate is: 3
Intermediate is: 4
Intermediate is: 5
Total is: 6
Intermediate is: 7
Intermediate is: 8
Intermediate is: 9
Total is: 10
Intermediate is: 11
Intermediate is: 12
Total is: 13
Intermediate is: 14
Total is: 15
Total is: 16
Total is: 17
Total is: 18
Total is: 19
Total is: 20