PL/pgSQL 记录类型
简介:在本教程中,您将了解 PL/pgSQL 记录类型,它们允许您定义可以保存结果集中单行的变量。
PL/pgSQL 记录类型介绍
PostgreSQL 提供了一种 record 类似于row-type的“类型”,称为。
要声明 record 变量,请使用变量名后跟 record 关键字,如下所示:
variable_name record;
record 变量类似于行类型的变量。它只能保存结果集的一行。
与行类型变量不同, record 变量没有预定义的结构。 record 变量的结构是在 select or for 语句为其分配实际行时确定的。
要访问记录中的字段,请使用点符号 ( .) 语法,如下所示:
record_variable.field_name;
如果您在分配之前尝试访问记录变量中的字段,则会出现错误。
事实上,记录并不是真正的数据类型。它只是一个占位符。此外,当您重新分配记录变量时,它可以更改其结构。
PL/pgSQL 记录示例
让我们举一些使用记录变量的例子。
在 select into 语句中使用 record
以下示例说明了如何将 record 变量与 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_id200的行放入rec变量 - 第三,通过record变量打印出影片的信息。
在for循环语句中使用record变量
下面显示了如何在 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 loop 在for 循环教程中了解有关该语句的更多信息。
这个怎么运作:
- 首先,声明一个类型为 r 的变量
record。 - 其次,使用该
for loop语句从film表中获取行(在 PostgreSQL Sakila 示例数据库中)。该for loop语句在每次迭代中将包含title和的行分配给变量。lengthrec - 三、用点表示法(
rec.title和rec.length)显示记录变量的字段内容
概括
- 记录是一个占位符,可以保存结果集的单行。
- 记录没有像行变量这样的预定义结构。它的结构是在您为其分配一行时确定的。