在db2中使用带有时间戳的xmlserialize

时间:2015-08-27 21:42:47

标签: db2

我一直在寻找一种方法将多个返回的行组合到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 

1 个答案:

答案 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周期。