XML 分配

当分配目标为 XML 时,以下规则适用。

XML 赋值的一般规则是只能将 XML 值赋给 XML 列或 XML 变量。 此规则有如下例外:

  • 输入 XML 变量的处理: 这是 XML 赋值规则的特殊情况,因为该变量基于字符串值。 要在 SQL 中对 XML 进行赋值,将使用 CURRENT IMPLICIT XMLPARSE OPTION 专用寄存器的设置将字符串值隐式解析为 XML 值。 这将确定是保留还是除去空格,除非该变量是 XMLVALIDATE 函数的自变量,该函数始终除去不必要的空格。
  • 将字符串分配给数据类型为 XML 的输入参数标记: 如果输入参数标记具有隐式或显式数据类型 XML ,那么分配给该参数标记的值可以是字符串变量,图形字符串变量或二进制字符串变量。 在这种情况下,将使用 CURRENT IMPLICIT XMLPARSE OPTION 专用寄存器的设置将字符串值隐式解析为 XML 值。 这将确定是保留还是除去空格,除非参数标记是 XMLVALIDATE 函数的自变量,而该自变量总是除去不必要的空格。
  • 将字符串直接分配给数据更改语句中的 XML 列: 如果直接分配给数据更改语句中类型为 XML 的列,那么分配的表达式也可以是字符串,图形字符串或二进制字符串。 在这种情况下,会将 XMLPARSE (DOCUMENT 表达式 STRIP WHITESPACE) 的结果分配给目标列。 受支持的字符串数据类型由 XMLPARSE 函数的受支持自变量定义。 此异常也适用于类型为 XML 的 SQL 参数。
  • 在检索时将 XML 分配给字符串: 如果在嵌入式 SQL 中使用 FETCH 或 SELECT INTO 将 XML 值检索到变量中,那么该变量的数据类型可以是 CLOB , DBCLOB 或 BLOB。 将 XML 值隐式序列化为以变量的 CCSID 编码的字符串。 如果使用其他应用程序编程接口 (例如 CLI , JDBC或 .NET) ,那么可以将 XML 值检索到应用程序编程接口支持的字符,图形或二进制字符串类型中。 在所有这些情况下,会将 XML 值隐式序列化为以 QAQQINI 文件所确定的 CCSID 编码的字符串,如 XML 值中所述。

对于 FETCH ,无法将 SELECT INTO , SET 和 VALUES INTO 语句,字符串,图形字符串或二进制字符串值检索到 XML 变量中。 对于 INSERT , UPDATE , MERGE , SET , VALUES INTO 和 CALL 语句,不能将 XML 变量中的值分配给列, SQL 变量或字符,图形或二进制字符串数据类型的 SQL 参数。