八月 20, 2023
摘要:在本教程中,您将了解 PL/pgSQL 记录类型,这些类型允许您定义可以保存结果集中的单行的变量。
目录
PL/pgSQL 记录类型简介
PostgreSQL 提供了一种称为record
的“类型”,类似于行类型。
要声明record
变量,请使用变量名,后跟record
关键字,如下所示:
variable_name record;
record
变量类似于行类型变量。它只能保存结果集中的一行。
与行类型变量不同,record
变量没有预定义的结构。当select
或for
语句将实际行分配给变量时,record
变量的结构就确定了。
要访问记录中的字段,可以使用点号 (.
) 语法,如下所示:
record_variable.field_name;
如果在分配记录变量之前尝试访问记录变量中的字段,则会收到错误。
事实上,record 并不是真正的数据类型。它只是一个占位符。此外,当您重新分配记录变量时,它可以更改其结构。
PL/pgSQL 记录类型示例
让我们来看一些使用记录变量的例子。
1) 将记录与 select into 语句一起使用
以下示例说明了如何在select into
语句中使用记录变量:
do
$$
declare
rec record;
begin
-- select the film
select film_id, title, length
into rec
from film
where film_id = 200;
raise notice '% % %', rec.film_id, rec.title, rec.length;
end;
$$
language plpgsql;
怎么运行的。
- 首先,在声明部分声明一个名为
rec
的记录变量。 - 其次,使用
select into
语句查询film_id
值为 200 的行,并放入rec
变量中。 - 第三,通过记录变量打印出影片的信息。
2) 在 for 循环语句中使用记录变量
下面展示了如何在for loop
语句中使用记录变量:
do
$$
declare
rec record;
begin
for rec in select title, length
from film
where length > 50
order by length
loop
raise notice '% (%)', rec.title, rec.length;
end loop;
end;
$$
下面是部分的输出:
NOTICE: Hall Cassidy (51)
NOTICE: Champion Flatliners (51)
NOTICE: Deep Crusade (51)
NOTICE: Simon North (51)
NOTICE: English Bulworth (51)
...
请注意,您将在 for 循环教程中了解有关for loop
语句的更多信息。
怎么运行的:
- 首先,声明一个名为 r 且类型为
record
的变量。 - 其次,使用
for loop
语句从film
表(在示例数据库中)获取行。for loop
语句在每次迭代中将由title
和length
组成的行分配给rec
变量。 - 第三,使用点符号(
rec.title
和rec.length
)显示记录变量的字段内容。
总结
- 记录是可以保存结果集中单行的占位符。
- 记录没有像行变量那样的预定义结构。当您向它分配行时,它的结构就确定了。