ROW 构造函数

您使用 ROW 构造函数来生成 ROW 类型列的值。

假设您创建下列命名的 ROW 类型以及包含命名的 ROW 类型 row_t 和未命名的 ROW 类型的表:
CREATE ROW TYPE row_t ( x INT, y INT);
          CREATE TABLE new_tab 
          (
          col1 row_t, 
          col2 ROW( a CHAR(2), b INT)
          );
当您定义列作为命名的 ROW 类型或未命名的 ROW 类型时,您必须使用 ROW 构造函数来生成 ROW 类型列的值。要为命名的 ROW 类型或未命名的 ROW 类型创建值,您必须完成下列步骤:
  • 以 ROW 关键字开始该表达式。
  • 为每一 ROW 类型的字段指定值。
  • 将以逗号分隔的字段值的列表括在圆括号内。

每一字段的值的格式必须与将它指定到的那个 ROW 字段的数据类型相兼容。

您可使用任何类型的表达式作为带有 ROW 构造函数的值,包括文字、函数和变量。下列示例展示使用不同类型的带有 ROW 构造函数的表达式来指定值:
ROW(5, 6.77, 'HMO')
          
          ROW(col1.lname, 45000)
          
          ROW('john davis', TODAY)
          
          ROW(USER, SITENAME)
下列语句使用带有 ROW 构造函数的字面的数值和引用的字符串来将值插入到 new_tab 表的 col1 col2 内:
INSERT INTO new_tab 
          VALUES 
          (
          ROW(32, 65)::row_t,
          ROW('CA', 34)
          );
当您使用 ROW 构造函数来生成命名的 ROW 类型的值时,您必须显式地将 ROW 强制转型为适当的命名的 ROW 类型。 强制转型有必要生成命名的 ROW 类型的值。要将 ROW 值强制转型为命名的 ROW 类型,您可使用强制转型运算符(:: )或 CAST AS 关键字,如下例所示:
ROW(4,5)::row_t 
          CAST (ROW(3,4) AS row_t)
您可使用 ROW 构造函数来在 INSERT、UPDATE 和 SELECT 语句中生成 ROW 类型值。在下一示例中,SELECT 语句的 WHERE 子句指定强制转型为类型 person_t 的一个 ROW 类型值:
SELECT * FROM person_tab 
          WHERE col1 = ROW('charlie','hunter')::person_t;

要获取更多关于在 INSERT 和 UPDATE 语句中使用 ROW 构造函数的信息,请参阅本文档中的 INSERT 和 UPDATE 语句。要获取关于命名的 ROW 类型的信息,请参阅 CREATE ROW TYPE 语句。要获取关于未命名的 ROW 类型,请参阅 GBase 8s SQL 参考指南 中的 ROW 数据类型的讨论。要了解关于命名的 ROW 类型和未命名的 ROW 类型的面向任务的信息,请参阅 GBase 8s 数据库设计和实现指南