xmlcast在Db2中返回空值



我总是得到一个空值从使用XMLCAST函数。但是当使用一个正常的函数调用它是返回值在xml格式…如下查询适当的XML数据来。函数getdatvalue返回xml数据类型。使用Linux 8.2和db2 11.5

db2 "select sample.Getdatavalue(1,4504)) from sysibm.sysdummy1"

在上面的结果中,我们在输出xml中有一些双引号。

,但是一旦我们像下面这样使用xmlcast函数,它将返回空的十六进制值。我使用MD5哈希机制。

db2 "select HEX(HASH(xmlcast(sample.Getdatavalue(1,4504) as varchar(32672)),0)) as hash_val from sysibm.sysdummy1";

即使我没有尝试过哈希,它也会为下面的查询返回空结果。看起来xmlcast不工作。

db2 "select xmlcast(sample.Getdatavalue(1,4504) as varchar(32672)) as hash_val from sysibm.sysdummy1";

是否有办法将XML数据类型转换为clob或varchar。

Getdatavalue的主体为:

CREATE FUNCTION sample.Getdatavalue (v1 smallint, v2 integer)
RETURNS xml
LANGUAGE SQL
BEGIN ATOMIC
DECLARE v_Data xml;
set v_Data = (SELECT XMLELEMENT( NAME "rt_ky_cmpnnt", 
XMLAGG(XMLELEMENT(NAME "rt", XMLAttributes(rt.rt_field_add_val AS 
"rt_add_val",
rt.rt_name AS 
"rt_name",
rt.rt_name AS 
"rt_name",
rt.rt_val1 AS "rt_val1",
rt_lim AS "rt_lim",
rt.rt_val2 AS "rt__val2",
rt.rt_whole_val AS "rt_whole_val" ))order by 
rf.rt_num asc)OPTION null ON NULL)
FROM sample.cmpnnt_val rt inner join sample.field_val rf
on rf.abc=rt.abc
and rf.pqr=rt.pqr
and rt.xyz=rf.xyz
where rt.abc = v1
AND rt.bcd = v2 );
RETURN v_Data;
END!

谁能解释一下如何处理xmlcast ?

要从XML值中检索字符串,请使用XMLSERIALIZE函数。

XMLSERIALIZE函数返回由XML表达式参数生成的指定数据类型的序列化XML值。