以下查询
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;