当示例说明-Oracle SQL时继续



嗨,我正在尝试解释以下示例的结果,但我不知道为什么。希望有人能帮我了解一下。谢谢

代码+结果

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

最新更新