PL/pgSQL 退出语句
在本教程中,您将了解 exit 语句以及如何使用它来终止循环或块。
摘要:在本教程中,您将了解 exit 语句以及如何使用它来终止循环或块。
PL/pgSQL Exit 语句简介
该 exit 语句允许您终止循环,包括无条件循环、while 循环和for 循环。
下面显示了该 exit 语句的语法:
exit [label] [when boolean_expression]
的 label 是电流环路,其中的环路标签 exit 是在或外回路的回路标签。根据标签,该 exit 语句将终止相应的循环。如果不使用标签, exit 语句将终止当前循环。
该 when boolean_expression 子句用于指定终止循环的条件。 exit 如果 boolean_expression 计算结果为 ,则该语句将终止循环 true 。
以下语句是等效的:
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 退出示例
让我们举一些使用 PL/pgSQL exit 语句的例子。
使用 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 语句都不使用任何循环标签,它们将终止当前循环。
第一条 exit 语句在 i 大于时终止外循环 3 。这就是为什么你看到的价值 i 输出是 1 , 2 和 3 。
exit 当 j 大于时,第二条语句终止内部循环 3 。这就是你看到的原因 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时终止外循环。
使用PL/pgSQL Exit语句退出一个block
下面的例子说明了如何使用该 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语句退出块。