在其他行类型中使用命名行类型

可以使用命名行类型作为另一个行类型中的字段的数据类型。嵌套行类型是包含另一个行类型的行类型。可以将任何行类型嵌套在任何其他行类型中。对行类型可以具有的嵌套深度不存在实际的限制。然而,对深度嵌套的行类型执行插入或更新要求仔细地使用语法。

对于命名行类型,由于在可以使用命名行类型来在另一个行类型中定义列或字段之前该命名行类型必须存在,所以创建行类型的次序十分重要。在以下示例中,第一个语句创建 address_t 类型,该类型在第二个语句中用来定义 employee_t 类型的 address 字段的类型:
CREATE ROW TYPE address_t
(
      street  VARCHAR (20),
      city    VARCHAR(20),
      state   CHAR(2),
      zip     VARCHAR(9)
);

CREATE ROW TYPE employee_t 
(
      name     VARCHAR(30) NOT NULL,
      address  address_t,
      salary   INTEGER
);
重要: 不能递归地使用行类型。如果 type_t 是行类型,那么不能使用 type_t 来作为包含在 type_t 中的字段的数据类型。