私は使用Oracle 11.2.0.4.0
しており、関与したときに何度か問題に遭遇しXMLTABLE
ました。私の最新の問題は、次の例で示すことができます (できるだけ単純になるように設計しました)。
with data as
(
select '<A><B>B21</B></A>' x from dual
),
extractedxml as (
SELECT b
FROM data d,
xmltable('/A/B' PASSING xmltype(d.x) COLUMNS b varchar2(20) PATH '.')
)
select b from extractedxml union
select b from extractedxml;
次のエラーが発生します。
ORA-19032: Expected XML tag , got no content
ORA-06512: at "SYS.XMLTYPE", line 310
ORA-06512: at line 1
19032. 00000 - "Expected XML tag %s got %s"
*Cause: When converting XML to object, a wrong tag name was present
*Action: Pass a valid canonical XML that can map to the given object type
次のクエリは期待どおりに機能します (with 句は変更されていません)。
with data as
(
select '<A><B>B21</B></A>' x from dual
),
extractedxml as (
SELECT b
FROM data d,
xmltable('/A/B' PASSING xmltype(d.x) COLUMNS b varchar2(20) PATH '.')
)
select b from extractedxml;
B
--------------------
B21
XMLTABLE
さらに、の使用が回避されている場合、クエリは機能します。
with data as
(
select '<A><B>B21</B></A>' x from dual
),
extractedxml as (
SELECT cast (extractvalue(column_value,'B') as varchar2(20)) b
FROM data, table(xmlsequence(extract(xmltype(data.x),'/A/B')))
)
select b from extractedxml union
select b from extractedxml;
B
--------------------
B21
したがって、回避策があり、XMLTABLE
上記の動作を理解していない限り、使用を避けます。バグがXMLTABLE
あると見なされますか、それとも何か不足していますか?