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_id 200的行放入 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 和的行分配给变量。 length rec
  • 三、用点表示法( rec.title 和 rec.length )显示记录变量的字段内容

概括

  • 记录是一个占位符,可以保存结果集的单行。
  • 记录没有像行变量这样的预定义结构。它的结构是在您为其分配一行时确定的。