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 之前的语句被执行,之后,流程只是在块结束后通过。