Sto utilizzando Oracle 11.2.0.4.0
e ho avuto più problemi nei problemi quando era coinvolto lo XMLTABLE
. Il mio ultimo problema può essere illustrato con il seguente esempio (che ho progettato per essere il più semplice possibile):Errore strano con XMLTABLE su Oracle 11g
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;
produce il seguente errore:
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
mentre la seguente query funziona come previsto (la con la clausola è invariato):
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
ulteriormente la query funziona se l'uso di XMLTABLE
è evitato:
Quindi ho una soluzione alternativa e eviterò di utilizzare XMLTABLE
finché non capisco il comportamento descritto sopra. È XMLTABLE
essere considerato buggy o mi sto perdendo qualcosa?
riproducibile in 11.2.0.3; su 10.2.0.5 core-dump (anche se con l'aggiunta di un suggerimento NO_XML_QUERY_REWRITE per evitare il bug 5963973 mostra anche questo comportamento). Quindi sembra un bug e probabilmente dovresti sollevare una richiesta di servizio per segnalarlo. –
Penso che ci sia un bug. Quando aggiungo 'NVL' a expression -' xmltype (NVL (d.x, ' ')) 'quindi esegue la query, ma non restituisce alcuna riga. 'con i dati come ( selezionare ' B21' x da doppia ), extractedxml come ( SELEZIONA b dai dati d, XMLTable ('/ A/B' PASSAGGIO XMLType (NVL (dx , ' ')) COLONNE b varchar2 (20) PATH) ) selezionare b da extractedxml UNION selezionare b da extractedxml' –
@Asieh'.': quando si modifica, si ricorda che campate codice inline ('come this') [non deve essere utilizzato per l'evidenziazione] (http://meta.stackoverflow.com/q/254990), solo per il codice nelle frasi. Inoltre, prova a migliorare il post il più possibile durante la modifica per risparmiare tempo. Grazie! –