八月 22, 2023
摘要:在本教程中,您将了解 exit 语句以及如何使用它来终止循环或代码块。
目录
PL/pgSQL exit 语句简介
exit
语句允许您终止循环,包括无条件循环、while 循环和 for 循环。
下面显示了exit
语句的语法:
exit [label] [when boolean_expression]
label
是exit
所在的当前循环或外循环的循环标签。依据标签,exit
语句将终止相应的循环。如果不使用标签,exit
语句将终止它所在的当前循环。
when boolean_expression
子句用于指定终止循环的条件。如果boolean_expression
计算结果为true
,则该exit
语句将终止循环。
以下语句是等效的:
exit when counter > 10;
if counter > 10 then
exit;
end if;
exit when
绝对更干净、更简短。
除了终止循环之外,还可以使用exit
语句来终止由begin...end
关键字指定的块。在这种情况下,控制权被传递到当前块的end
关键字后面的语句:
<<block_label>>
BEGIN
-- some code
EXIT [block_label] [WHEN condition];
-- some more code
END block_label;
PL/pgSQL exit 语句示例
让我们看一些使用 PL/pgSQL 的exit
语句的示例。
1) 使用 PL/pgSQL exit 语句终止无条件循环
以下示例说明如何在无条件循环中使用exit
语句:
do
$$
declare
i int = 0;
j int = 0;
begin
<<outer_loop>>
loop
i = i + 1;
exit when i > 3;
-- inner loop
j = 0;
<<inner_loop>>
loop
j = j + 1;
exit when j > 3;
raise notice '(i,j): (%,%)', i, j;
end loop inner_loop;
end loop outer_loop;
end;
$$
输出:
NOTICE: (i,j): (1,1)
NOTICE: (i,j): (1,2)
NOTICE: (i,j): (1,3)
NOTICE: (i,j): (2,1)
NOTICE: (i,j): (2,2)
NOTICE: (i,j): (2,3)
NOTICE: (i,j): (3,1)
NOTICE: (i,j): (3,2)
NOTICE: (i,j): (3,3)
怎么运行的。
此示例包含两个循环:外循环和内循环。
由于这两个exit
语句都不使用任何循环标签,因此它们将终止当前循环。
当i
大于3
时,第一个exit
语句终止外循环。这就是为什么您在输出中看到i
的值为1
、2
和3
。
当j
大于3
时,第二条exit
语句终止内部循环。这就是您看到对于外循环的每次迭代j
输出为1
、2
和3
的原因。
以下示例将外循环的标签放置在第二个exit
语句中:
do
$$
declare
i int = 0;
j int = 0;
begin
<<outer_loop>>
loop
i = i + 1;
exit when i > 3;
-- inner loop
j = 0;
<<inner_loop>>
loop
j = j + 1;
exit outer_loop when j > 3;
raise notice '(i,j): (%,%)', i, j;
end loop inner_loop;
end loop outer_loop;
end;
$$
输出:
NOTICE: (i,j): (1,1)
NOTICE: (i,j): (1,2)
NOTICE: (i,j): (1,3)
在此示例中,第二条exit
语句在j
大于 3 时终止外循环。
2) 使用 PL/pgSQL exit 语句退出块
以下示例说明了如何使用exit
语句来终止代码块:
do
$$
begin
<<simple_block>>
begin
exit simple_block;
-- for demo purposes
raise notice '%', 'unreachable!';
end;
raise notice '%', 'End of block';
end;
$$
输出
NOTICE: End of block
在此示例中,exit 语句立即终止了simple_block
:
exit simple_block;
这条语句永远不会执行:
raise notice '%', 'unreachable!';
总结
- 使用
exit
语句终止循环,包括无条件循环、while
循环和for
循环。 - 还可以使用
exit
语句退出块。