声明 row 类型变量

Row 类型变量保存命名的和未命名的 row 类型的数据。您可定义命名的 row 变量未命名的 row 变量。假设您定义如下图所示的命名的 row 类型。

图: 命名的和未命名的 row 变量。

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 类型的名称定义变量,则该变量仅可保存那种 row 类型的数据。在下图中,person 变量仅可保存 employee_t 类型的数据。

图: 定义 person 变量。

DEFINE person employee_t;
要定义保存在未命名的 row 类型中的数据的变量,请跟在 row 类型的字段之后使用 ROW 关键字,如下图所示。

图: 使用后跟 row 类型的字段的 ROW 关键字。

DEFINE manager ROW (name        VARCHAR(30),
            department  VARCHAR(30),
            salary      INTEGER );
由于仅对未命名的 row 类型的结构等价进行类型检查,因此,以未命名的 row 类型定义的变量可保存任何未命名的 row 类型的数据,其有相同的字段数和相同的类型定义。因此,变量 manager 可保存下图中任何 row 类型的数据。

图: 未命名的 row 类型。

ROW ( name         VARCHAR(30),
            department   VARCHAR(30),
            salary       INTEGER );
            
            ROW ( french      VARCHAR(30),
            spanish     VARCHAR(30),
            number      INTEGER );
            
            ROW ( title       VARCHAR(30),
            musician    VARCHAR(30),
            price       INTEGER );
重要: 在您使用 row 类型变量之前,您必须使用 LET 语句或 SELECTINTO 语句来初始化该 row 变量。