本节描述如何查询定义为行类型的数据。ROW 类型是一个复杂类型,包含一个或多个相关数据字段。
两种 ROW 类型如下:
已命名 ROW 类型
已命名的 ROW 类型可以定义表、列、其它行类型列的字段、程序变量、语句变量以及例程返回值。
未命名 ROW 类型
未命名 ROW 类型可以定义列、其它行类型列的字段、程序变量、语句局部变量、例程返回值和常量。
本节中使用的示例使用已命名 ROW 类型 zip_t 、address_t 和 employee_t,这些 ROW 类型定义 employee 表。下图显示创建 ROW 类型和表的 SQL 语法。
图: 创建 ROW 类型和表的 SQL 语法
CREATE ROW TYPE zip_t
(
z_code CHAR(5),
z_suffix CHAR(4)
)
CREATE ROW TYPE address_t
(
street VARCHAR(20),
city VARCHAR(20),
state CHAR(2),
zip zip_t
)
CREATE ROW TYPE employee_t
(
name VARCHAR(30),
address address_t,
salary INTEGER
)
CREATE TABLE employee OF TYPE employee_t
已命名的 ROW 类型 zip_t 、address_t 和 employee_t 充当类型表 employee 的字段和列的模板。类型表是在已命名 ROW 类型上定义的表。充当 employee 表的模板的 employee_t 类型将 address_t 类型用作 address 字段的数据类型。address_t 类型使用 zip_t 类型作为 zip 字段的数据类型。下图显示了创建 student 表的 SQL 语法。student 表的 s_address 列定义为未命名的 ROW类型。(s_address 列被定义为已命名的 ROW 类型。)
1. 选择类型表的列
对类型表的查询与对任何其他表的查询没有区别。例如:下列查询使用星号(*)来指定返回 employee 表所有列的 SELECT 语句。
2 选择包含行类型数据的列 选择包含行类型数据的列
行类型列是在已命名 ROW 类型或未命名 ROW 类型上定义的列。使用相同的 SQL 语法来查询已命名 ROW 类型和未命名行类型列。
对行类型列的查询返回 ROW 类型的所有字段的数据。字段是 ROW 类型中的组件数据类型。例如:employee 表的 address 列包含 street、city 、state 和 zip 字段。下列查询显示如何构造返回 address 列的所有字段的查询。