受支持的行数据类型赋值

支持对行和行字段指定各种值。

声明行变量或参数时,行中的每个字段的缺省值为 NULL,直到对其指定值。

可将下列类型的值指定给行变量:
  • 行数据类型相同的另一行变量(使用 SET 语句)
    • 行变量值只能指定给行变量(如果它们是兼容类型)。如果两个行变量都属于同一行数据类型或者源行类型被定位至表或视图定义,那么这两个行变量可兼容。为使两个变量的类型可兼容,具有相同字段名称和字段数据类型是不够的。

      例如,如果创建了行数据类型 row1row2,并且它们的定义完全相同,那么类型为 row1 的变量值不能指定给类型为 row2 的变量。类型为 row2 的变量值也不能指定给类型为 row1 的变量。但是,类型为 row1 的变量 v1 的值可指定给类型为 row1 的变量 v2

  • 元素数目与该行相同,并且元素数据类型与行字段相同的元组。
    • 以下是要指定给行的字面值元组的示例:
      SET v1 = (1, 'abc')
  • 解析为行值的表达式
    • 解析为可指定给行变量的行值的表达式在 VALUES ... INTO 语句中是解析型表达式。以下是这类赋值的示例:
      VALUES (1, 'abc') INTO rv1
  • 函数的返回类型(如果其行数据类型与目标变量相同):
    • 以下是函数 foo 的返回类型与目标变量属于相同行数据类型的示例:
      SET v1 = foo()
      如果返回数据类型定义为锚定位数据类型,那么锚定位数据类型赋值规则适用。
  • 查询的单个行结果集
    • 结果集的元素数目必须与该行相同,并且必须可将列指定给与该行字段相同的数据类型。以下是此类型赋值的示例:
      SET v1 = (select c1, c2 from T)
  • NULL
    • 将 NULL 指定给行变量时,所有行字段都将设置为 NULL,但行变量本身仍然不为 NULL。
可将以下类型的值指定给行变量字段:
  • 字面值
  • 参数
  • 变量
  • 表达式
  • NULL
可通过下列方式向行字段值指定值:
  • 使用 SET 语句
  • 使用解析为行值的 SELECT INTO 语句
  • 使用解析为行值的 FETCH INTO 语句
  • 使用解析为行值的 VALUES INTO 语句

可将 ROW 数据类型指定为 SQL 标量函数的返回类型。