📜  PostgreSQL – 退出

📅  最后修改于: 2022-05-13 01:57:05.816000             🧑  作者: Mango

PostgreSQL – 退出

在 PostgreSQL 中, EXIT 语句用于终止所有类型的循环,如无条件循环、while 循环或 for 循环,或终止由begin..end关键字指定的代码块。

使用 EXIT 循环

我们可以使用 exit 来终止循环语句,语法如下:

句法:

exit [label] [when condition]

如果我们分析上面的语法:

  • 标签:标签用于表示我们要退出的循环。它通常用于嵌套循环的情况。如果标签不存在,则终止当前循环。
  • 条件:条件是一个简单的布尔表达式,用于确定我们何时要终止循环。当布尔表达式的值变为真时,循环终止。

以上两个都是可选的。我们可以使用带有如下条件的退出:

exit when cnt < 5;

在退出时不使用条件,我们可以使用IF 语句重写相同的代码:

if cnt < 5 then
  exit;
end if;

例子:

假设我们有一个循环用于打印从 1 到 10 的所有数字。我们可以通过以下方式使用 EXIT 语句来限制打印最多 7 个数字。

do $$
declare
 n integer:= 8;
 cnt integer := 1 ;  
begin
loop  
exit when cnt = n ;
raise notice '%', cnt;  
cnt := cnt + 1 ;  
end loop;  
end; $$;

输出:

在上面的例子中,一旦我们的 cnt 变量的值达到 n(这里是 8),我们就终止我们的循环,因此,只打印不超过 7 的值。

使用 EXIT 退出一个块

然后我们可以通过 exit 语句来终止由begin..end关键字指定的代码块。在这种情况下,出口直接将程序的流程传递到 end 关键字之后,从而结束当前块。

句法:

<>
BEGIN
   Statements
   EXIT [block_label] [WHEN condition];
   Statements
END block_label;

使用这种语法,我们可以提前终止代码块,从而阻止退出后的语句运行。

例子:

下面的例子展示了我们如何使用 EXIT 来退出一个块。

do
$$
begin
 raise notice '%', 'Before block';
 <>  
  begin
 raise notice '%', 'Before exit ; inside block';
   exit normalblock;
    raise notice '%', 'After exit ; inside block';
  end;
  raise notice '%', 'End of block';
end;
$$;

输出:

在上面的例子中,exit 之后的语句没有打印出来,因为在语句之前使用 EXIT 终止了块。因此,在块内部,只有 EXIT 之前的语句被执行,之后,流程只是在块结束后通过。