在DB2脚本中将SQL查询结果导出为XML

时间:2011-10-27 12:42:15

标签: sql xml command-line db2

我正在尝试查询SQL脚本中的大量系统/数据库信息,以便在DB2 Linux / Unix / Windows上运行。 理想情况下,输出应该是机器可读的,并且至少对人类来说是可理解的。

由于DB2 CLP中的输出格式化似乎不稳定(或者我太新了)我尝试将内容输出为XML并稍后处理它,例如:

VALUES ('<?xml version="1.0"?>');
SELECT REC2XML(1.0, 'COLATTVAL', 'row', NAME, VALUE, DEFERRED_VALUE) FROM SYSIBMADM.DBMCFG ORDER BY NAME;

这没关系;我得到输出我可以进一步处理。

但是,当我尝试使用current_timestamp:

等函数运行REC2XML时
SELECT Current_timestamp FROM sysibm.sysdummy1;

我不能使用REC2XML,因为它似乎只支持列选择。

没有太多的DB2知识:

  1. 是否有更好/更简单的方法从SQL脚本生成XML输出
  2. 是否有某种方法可以将诸如current_timestamp之类的函数的结果输出为XML?
  3. 请注意,我正在使用SQL脚本(不是shell脚本);如果可能的话,我想让它在Windows,Linux和Unix机器上保持可用......

2 个答案:

答案 0 :(得分:1)

  1. 我不知道更好的方法。
  2. 您可以获得如下函数的XML输出:

    Select REC2XML(1.0, 'COLATTVAL', 'row', ct) From (SELECT current timestamp as ct FROM sysibm.sysdummy1);
    

答案 1 :(得分:0)

DB2 for zOS中不存在此函数。替代方法是使用XMLFOREST生成列集,使用XMLAGG合并行。

SELECT
xmlserialize(
    xmlelement(
        name "employees",
        xmlagg(
            xmlelement(
                name "employee",
                xmlforest(
                    EMPNO as "empno",
                    SURNAME as "surname",
                    MIDNAME as "midname",
                    FIRSTNAME as "firstname",
                    HIREDATE as "hiredate"
                )
            )   
            order by EMPNO
        )
    AS CLOB VERSION '1.0' INCLUDING XMLDECLARATION
    )
)
from EMPLOYEES

样品:

<?xml version="1.0" encoding="UTF-8"?><employees><employee><empno>12345</empno> ...