八月 20, 2023
摘要:在本教程中,您将了解 PL/pgSQL 的块结构以及如何编写和执行第一个 PL/pgSQL 块。
目录
PL/pgSQL 块结构简介
PL/pgSQL 是一种块结构语言,因此,PL/pgSQL 函数或存储过程被组织成代码块。
下面说明了 PL/pgSQL 中完整块的语法:
[ <<label>> ]
[ declare
declarations ]
begin
statements;
...
end [ label ];
让我们更详细地查看块结构:
- 每个块都有两个部分:声明和主体。声明部分是可选的,而主体部分是必需的。块以
END
关键字后面的分号 (;
)结束。 - 块可以在开头和结尾有一个可选标签。当您想要在块体的
EXIT
语句中指定它,或当您想要限定块中声明的变量的名称时,可以使用块标签。 - 声明部分是声明主体部分中使用的所有变量的地方。声明部分中的每条语句均以分号 (
;
) 结尾。 - 主体部分是放置代码的地方。主体部分中的每个语句也以分号 (;) 结尾。
PL/pgSQL 块结构示例
以下示例说明了一个非常简单的块。它被称为匿名块。
do $$
<<first_block>>
declare
film_count integer := 0;
begin
-- get the number of films
select count(*)
into film_count
from film;
-- display a message
raise notice 'The number of films is %', film_count;
end first_block $$;
NOTICE: The current value of counter is 1
要从 pgAdmin 执行块,请单击“执行”按钮,如下图所示:
请注意,DO
语句不属于该块。它用于执行匿名块。PostgreSQL 从 9.0 版本开始引入了DO
语句。
匿名块可以用单引号引起来,如下所示:
'<<first_block>>
declare
film_count integer := 0;
begin
-- get the number of films
select count(*)
into film_count
from film;
-- display a message
raise notice ''The number of films is %'', film_count;
end first_block';
但是,我们使用美元符号引用的字符串常量语法来使其更具可读性。
在声明部分,我们声明了一个变量film_count
并将其值设置为零。
film_count integer := 0;
在主体部分中,我们使用了带有count()
函数的select into
语句来从film
表中获取电影数量,并将结果分配给film_count
变量。
select count(*)
into film_count
from film;
之后,我们使用raise notice
语句显示一条消息:
raise notice 'The number of films is %', film_count;
%
是一个占位符,将被film_count
变量值的内容替换。
请注意,该first_block
标签仅用于演示目的。在此示例中它不执行任何操作。
PL/pgSQL 子块
PL/pgSQL 允许您将一个块放置在另一个块的主体内。
嵌套在另一个块内的块称为子块。包含子块的块被称为外部块。
下图说明了外部块和子块:
通常,您会将一个大块划分为更小且更具逻辑性的子块。子块中的变量可以具有与外部块中的变量相同的名称,尽管这不是一个好的做法。
总结
- PL/pgSQL 是一种块结构语言。它将程序组织成块。
- 一个块包含两部分:声明和主体。声明部分是可选的,而主体部分是必需的。
- 块可以嵌套。嵌套块是放置在另一个块体内的块。