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 语句退出块。