UNPACK 行函数 (row function)

UNPACK函数返回从输入二进制字符串解包得到的一行值。 它用于解压缩根据PACK函数编码的字符串。

阅读语法图跳过可视化语法图UNPACK(表达式)

该模式是 SYSIBM。

表达式
用于返回待解包的字符串值的表达式。 表达式必须是一个非BLOB且非空值的二进制字符串。 二进制字符串的格式必须与PACK函数生成的格式一致。

UNPACK 功能只能在 SELECT 列表和 UPDATE 语句的 SET 子句中指定。

函数的结果是一排字段,对应于输入压缩字符串中编码的数据元素。 结果值不为 NULL。

示例 1 :假设一个名为 myUDF 的用户定义函数返回一个 VARBINARY 结果。 函数的主体包括以下内容:调用PACK函数将一些数据打包为二进制字符串:

  SET :udf_result = PACK(CCSID 1208, 'Alina', DATE('1977-08-01'),
                        DOUBLE(0.5));

下面的SELECT语句解压缩了 myUDF 函数的返回结果,并返回一行单独的列值:

  SELECT UNPACK(myUDF(C1)).* AS(Name VARCHAR(40) CCSID UNICODE,
                               DOB DATE,
                               Score DOUBLE)
    FROM T1;

使用“*” 表示应将UNPACK函数的结果转换为结果列值的列表。 当在SELECT子句中使用UNPACK函数时,需要指定一个AS子句,为结果值提供名称和数据类型。

示例2 :假设用户定义的函数UDF_SCORE返回VARBINARY结果。 调用PACK函数返回一个二进制字符串,其中编码并打包了表 T1 的列值。 UNPACK函数返回一行数据的各个数值,列名分别为ID、SCORE和CONF:

  SELECT T1.C1, T1.C2, T1.C3, T1.C4,
         UNPACK( UDF_SCORE( PACK(CCSID 1208, T1.C1, T1.C2, T1.C3)) ).*
                AS (ID INT, SCORE DOUBLE, CONF DOUBLE)
    FROM T1;

示例 3 :假设一个名为 myUDF 的用户定义函数返回一个 VARBINARY 结果。 函数的主体包括以下内容:调用PACK函数,将一些数据打包为二进制字符串。 打包的字符数据包括EBCDIC和Unicode数据。 CCSID DEFAULT子句使数据以原始编码打包。

SET :udf_result = PACK(CCSID DEFAULT,
 CAST('Privet' AS VARCHAR(10) CCSID UNICODE),
 CAST(NULL AS TIME),CAST('Bridget' AS VARCHAR(20) CCSID EBCDIC));

下面的SELECT语句解压缩了 myUDF 函数的返回结果,并返回了一行单独的列值。 CCSID条款确保数据解包时使用的编码方案与打包前相同。

SELECT UNPACK(myUDF(C1)).* AS(MSG VARCHAR(10) CCSID UNICODE,
 DOB DATE,
 NAME VARCHAR(20) CCSID EBCDIC)
 FROM T1;