postgresql中ROWTYPE,TYPE和RECORD之间的区别?

时间:2016-01-13 05:02:58

标签: postgresql plpgsql rdbms sqldatatypes

以下声明的用途是什么?我们在哪里使用这些类型的声明?

myrow tablename%ROWTYPE;
myfield tablename.columnname%TYPE;
arow RECORD;

1 个答案:

答案 0 :(得分:14)

来自PostgreSQL's documentation

  • TYPE提供变量或表列的数据类型。您可以使用它来声明将保存数据库值的变量。例如,假设您的user_id表中有一个名为users的列。要声明与users.user_id具有相同数据类型的变量,请编写:user_id users.user_id%TYPE;

  • ROWTYPE:复合类型的变量称为行变量(或行型变量)。只要该查询的列集与变量的声明类型匹配,这样的变量就可以保存SELECTFOR查询结果的整行。使用通常的点表示法访问行值的各个字段,例如rowvar.field

  • RECORD:记录变量与行型变量类似,但它们没有预定义的结构。它们采用SELECTFOR命令期间分配的行的实际行结构。记录变量的子结构可以在每次分配时更改。这样做的结果是,在第一次分配记录变量之前,它没有子结构,任何访问其中字段的尝试都会产生运行时错误。

请参阅链接以获取更深入的示例。