PostgreSQL 教程: PL/pgSQL record 记录类型

八月 20, 2023

摘要:在本教程中,您将了解 PL/pgSQL 记录类型,这些类型允许您定义可以保存结果集中的单行的变量。

PL/pgSQL 记录类型简介

PostgreSQL 提供了一种称为record的“类型”,类似于行类型

要声明record变量,请使用变量名,后跟record关键字,如下所示:

variable_name record;

record变量类似于行类型变量。它只能保存结果集中的一行。

与行类型变量不同,record变量没有预定义的结构。当selectfor语句将实际行分配给变量时,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语句在每次迭代中将由titlelength组成的行分配给rec变量。
  • 第三,使用点符号(rec.titlerec.length)显示记录变量的字段内容。

概括

  • 记录是可以保存结果集中单行的占位符。

  • 记录没有像行变量那样的预定义结构。当您向它分配行时,它的结构就确定了。