XMLSEQUENCE和空列

时间:2015-12-08 15:07:37

标签: sql xml oracle

以下查询

WITH TABLE_TEMP AS (
    SELECT '1a' as "column1", '1b' as "column2" FROM DUAL
    UNION ALL
    SELECT '2a' as "column1", null as "column2" FROM DUAL
    UNION ALL
    SELECT '3a' as "column1", '' as "column2" FROM DUAL
)

SELECT VALUE(em) AS "XMLTYPE"
FROM TABLE(XMLSEQUENCE(CURSOR(SELECT * FROM TABLE_TEMP))) em

输出

 XMLTYPE
 ---------------------------------------------------------------
  <ROW><column1>1a</column1><column2>1b</column2></ROW>
  <ROW><column1>2a</column1></ROW>
  <ROW><column1>3a</column1></ROW>

如何修改要输出的查询

 XMLTYPE
 ---------------------------------------------------------------
  <ROW><column1>1a</column1><column2>1b</column2></ROW>
  <ROW><column1>2a</column1></ROW>
  <ROW><column1>3a</column1><column2 /></ROW>

=&GT;我想保留空列(不是空列)

编辑:

正如Chrisrs2292所提到的,XMLSEQUENCE已被弃用。 这是使用XMLTABLE而不是XMLSEQUENCE的相同问题代码。 但经过一些研究,我认为没有解决方案。 Oracle似乎以同样的方式处理NULL和空列。

SELECT
    VALUE(table_temp) AS "XMLTYPE"
FROM
    XMLTABLE('/ROWSET/ROW' PASSING
        DBMS_XMLGEN.GETXMLTYPE('
            SELECT ''1a'' as "column1", ''1b'' as "column2" FROM DUAL
            UNION ALL
            SELECT ''2a'' as "column1", null as "column2" FROM DUAL
            UNION ALL
            SELECT ''3a'' as "column1", '''' as "column2" FROM DUAL
        ')
    ) table_temp;

0 个答案:

没有答案