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

mrg*_*mrg 10 postgresql rdbms plpgsql sqldatatypes

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

myrow tablename%ROWTYPE;
myfield tablename.columnname%TYPE;
arow RECORD;
Run Code Online (Sandbox Code Playgroud)

mec*_*ech 15

PostgreSQL的文档:

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

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

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

有关更深入的示例,请参阅链接.