更新 ROW 类型列

使用 SET 子句来更新命名的或未命名的 ROW 类型列。例如,假设您定义下列命名的 ROW 类型和包含命名的和未命名的 ROW 类型的列的表:
CREATE ROW TYPE address_t 
          (
          street CHAR(20), city CHAR(15), state CHAR(2)
          );
          CREATE TABLE empinfo 
          (
          emp_id INT
          name ROW ( fname CHAR(20), lname CHAR(20)),
          address address_t
          );

要更新未命名的 ROW 类型,请在圆括号括起的字段值的列表之前指定 ROW 构造函数。

下列语句更新 empinfo 表的 name 列(未命名的 ROW 类型):
UPDATE empinfo SET name = ROW('John','Williams') WHERE emp_id =455;
要更新命名的 ROW 类型,请在字段值的列表(在圆括号中)之前指定 ROW 构造函数,并使用强制转型(::)运算符来将 ROW 值强制转型为命名的 ROW 类型。下列语句更新 empinfo 表的 address 列(命名的 ROW 类型):
UPDATE empinfo
          SET address = ROW('103 Baker St','Tracy','CA')::address_t
          WHERE emp_id = 3568;

要获取更多关于 ROW 构造函数的语法,请参阅 构造函数表达式。另请参阅 Literal Row

ROW 列 SET 子句仅可支持字段的文字值。要使用 ESQL/C 变量来指定字段值,您必须将 ROW 数据选择到 row 变量内,使用单独的字段值的主变量,然后以 row 变量更新 ROW 列。要获取更多信息,请参阅 更新 Row 变量(ESQL/C)

您可使用 GBase 8s ESQL/C 主变量来插入非文字值作为:
  • 整个 row 类型插入列内

    使用 row 变量作为 SET 子句中的变量名称来一次更新 ROW 列中的所有字段。

  • ROW 类型的单独字段

    要将非文字值插入 ROW 类型列内,您可首先更新 row 变量中的元素,然后指定在 UPDATE 语句的 SET 子句中的 collection 变量。

当您使用 SET 子句中的 row 变量时,row 变量必须包含每一字段值的值。要获取关于如何将值插入到 row 变量内的信息,请参阅 更新 Row 变量(ESQL/C)

您可使用 UPDATE 语句来只修改行中的某些字段:
  • 以字段 projection 指定其值保持不变的所有字段的字段名称

    例如,下列 UPDATE 语句仅更改 empinfo 表的 address 列的 street city 字段:

    UPDATE empinfo
                  SET address = ROW('23 Elm St', 'Sacramento', address.state)
                  WHERE emp_id = 433;

    address.state 字段保持不变。

  • 将该行选择到 ESQL/C row 变量内并更新期望的字段。

    要获取更多信息,请参阅 更新 Row 变量(ESQL/C)