postgresql中ROWTYPE、TYPE和RECORD的区别?

Posted

技术标签:

【中文标题】postgresql中ROWTYPE、TYPE和RECORD的区别?【英文标题】:Differences between ROWTYPE, TYPE, and RECORD in postgresql? 【发布时间】:2016-04-17 22:58:51 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

来自PostgreSQL's documentation:

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

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

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

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

【讨论】:

以上是关于postgresql中ROWTYPE、TYPE和RECORD的区别?的主要内容,如果未能解决你的问题,请参考以下文章

CURSOR postgresql 中的 ROWTYPE

ORACLE中%TYPE和%ROWTYPE的使用

Oracle PL/SQL中如何使用%TYPE和%ROWTYPE

ORACLE中%TYPE和%ROWTYPE的使用

oracle type is table of rowtype和rowtype的区别

PLSQL的两个属性类型%type 和%rowtype