Hi,
I want to parse xml like:
<xml>
<field1>value1</field1>
<field2>value2</field2>
<field3>value3</field3>
</xml>
I write query, using xmltable and unpivot:
select *
from (select p.field1,
p.field2,
p.field3
from (select xmltype('<xml><field1>value1</field1><field2>value2</field2><field3>value3</field3></xml>') as xml
from dual) t,
xmltable('/xml' passing t.xml columns
field1 varchar2(100) path 'field1',
field2 varchar2(100) path 'field2',
field3 varchar2(100) path 'field3'
) p
)
unpivot (value for field in (field1, field2, field3))
I expect to receive 3 rows, but returns only 1, why?
Is works correctly, if I add "union all" and "select from dual where 1=2" like:
select *
from (select p.field1,
p.field2,
p.field3
from (select xmltype('<xml><field1>value1</field1><field2>value2</field2><field3>value3</field3></xml>') as xml
from dual) t,
xmltable('/xml' passing t.xml columns
field1 varchar2(100) path 'field1',
field2 varchar2(100) path 'field2',
field3 varchar2(100) path 'field3'
) p
union all
select '1' as column1,
'1' as column2,
'1' as column3
from dual where 1=2
)
unpivot (value for field in (field1, field2, field3))
What to do? This is a bug?
I want to write code without unnecessary constructions
There's a known bug related to this. See MOS note 2223258.1 for details.
You can fix it with the one-off patch:
Patch 14641856: UNPIVOT OPERATION ON VIEW WITH XMLTABLE IS MISSING ROWS