八月 21, 2023
摘要:在本教程中,您将学习如何使用 PL/pgSQL 的if
语句根据特定条件执行命令。
目录
PL/pgSQL if 语句简介
if
语句根据布尔表达式的结果确定要执行哪些语句。
PL/pgSQL 为您提供了三种形式的if
语句。
if then
if then else
if then elsif
1) PL/pgSQL if-then 语句
下面说明了if
语句的最简单形式:
if condition then
statements;
end if;
如果condition
为 true,则if
语句会执行statements
中的语句。如果condition
的计算结果为false
,则控制权将传递到END if
部分之后的下一条语句。
condition
是一个布尔表达式,计算结果为 true 或 false。
statements
可以是一个或多个语句,如果condition
为 true,它们将会被执行。它可以是任何有效的语句,甚至是另一个if
语句。
当一个if
语句放置在另一个if
语句内时,称为嵌套 if 语句。
下面的流程图说明了这个简单的if
语句。
请参见以下示例:
do $$
declare
selected_film film%rowtype;
input_film_id film.film_id%type := 0;
begin
select * from film
into selected_film
where film_id = input_film_id;
if not found then
raise notice 'The film % could not be found',
input_film_id;
end if;
end $$;
在此示例中,我们通过一个特定的电影 ID (0
) 选择了一部电影。
found
是 PL/pgSQL 过程语言中可用的全局变量。如果select into
语句分配了行,则设置found
变量为true
,如果未返回行,则设置变量为false
。
我们使用if
语句来检查指定 id (0) 的电影是否存在,如果不存在则发出通知。
ERROR: The film 0 could not be found
如果将input_film_id
变量的值更改为电影表中存在的某个值(例如 100),您将看不到任何消息。
2) PL/pgSQL if-then-else 语句
下面说明了if-then-else
语句的语法:
if condition then
statements;
else
alternative-statements;
end if;
如果condition
的计算结果为 true,则if then else
语句执行if
分支中的语句;否则,执行else
分支中的语句。
以下流程图说明了if else
语句。
请参见以下示例:
do $$
declare
selected_film film%rowtype;
input_film_id film.film_id%type := 100;
begin
select * from film
into selected_film
where film_id = input_film_id;
if not found then
raise notice 'The film % could not be found',
input_film_id;
else
raise notice 'The film title is %', selected_film.title;
end if;
end $$;
在此示例中,film 表中存在 ID 为 100 的电影,因此FOUND
变量设置为 true。因此,else
分支中的语句会被执行。
这是输出:
NOTICE: The film title is Brooklyn Desert
3) PL/pgSQL if-then-elsif 语句
下面说明了if then elsif
语句的语法:
if condition_1 then
statement_1;
elsif condition_2 then
statement_2
...
elsif condition_n then
statement_n;
else
else-statement;
end if;
if
语句和if then else
语句只计算一个条件。但是,if then elsif
语句会计算多个条件。
如果一个condition
为真,则执行该分支中的相应语句。
例如,如果condition_1
是true
,则if then elsif
执行statement_1
,并停止计算其他条件。
如果所有条件的计算结果均为false
,则if then elsif
执行else
分支中的语句。
下面的流程图说明了if then elsif
语句:
让我们看下面的例子:
do $$
declare
v_film film%rowtype;
len_description varchar(100);
begin
select * from film
into v_film
where film_id = 100;
if not found then
raise notice 'Film not found';
else
if v_film.length > 0 and v_film.length <= 50 then
len_description := 'Short';
elsif v_film.length > 50 and v_film.length < 120 then
len_description := 'Medium';
elsif v_film.length > 120 then
len_description := 'Long';
else
len_description := 'N/A';
end if;
raise notice 'The % film is %.',
v_film.title, len_description;
end if;
end $$;
怎么运行的:
- 首先查询 id 为 100 的电影,如果该电影不存在,则发出找不到该电影的通知。
- 其次,使用
if then elsif
语句,根据电影的长度为电影分配描述。
总结
- 当条件为
true
时,使用if then
来执行语句。 - 使用
if then else
,可以在条件为true
时执行语句,在条件为false
时执行其他语句。 - 使用
if then elsif
来计算多个条件,并在相应的条件为true
时执行语句。