我一直在寻找一种方法将多个返回的行组合到db2数据库的单个行中(我有一个可以查询数据库的应用程序,但只有在返回单行时才能工作)。我发现this solution工作得很好,比使用递归SQL容易得多。但是,当我尝试包含一个设置为TIMESTAMP而不是VARCHAR的列时,我遇到了一个问题。
那么,如果列是TIMESTAMP类型,我怎样才能使这个工作?
错误:
SQL0440N No authorized routine named "XMLTEXT" of type "FUNCTION" having
compatible arguments was found. SQLSTATE=42884
SQL0440N No authorized routine named "XMLTEXT" of type "FUNCTION " having compatible arguments was found.
".
示例:
select xmlserialize(
xmlagg(
xmlconcat(
xmltext(column_name),
xmltext(':'),
xmltext(content),
xmltext(','),
xmltext(DATETIMESTAMP),
xmltext(',')
)
) as varchar(10000)
)
from
yourtable
答案 0 :(得分:0)
而不是建议的CAST
,您可以围绕时间戳值包装TO
CHAR`函数:
select xmlserialize(
xmlagg(
xmlconcat(
xmltext(column_name),
xmltext(':'),
xmltext(content),
xmltext(','),
xmltext(TO_CHAR(DATETIMESTAMP)),
xmltext(',')
)
) as varchar(10000)
)
from
yourtable
如果您使用的是最新版本的DB2并且LISTAGG
可用,我建议您使用该功能。它比将SQL输入转换为XML类型然后将其转换回来要快得多。由于涉及所有官方规则,它需要一些CPU周期。