Oracle 11g. Ho capito che se aggiungo NOENTITYESCAPING
alla funzione XMLELEMENT
, si spegne bene l'escape dell'entità. Tuttavia, quando passo il risultato a EXTRACT
, l'escaping sembra tornare di nuovo.La funzione EXTRACT di Oracle infrange il NOENTITYESCAPING in XMLELEMENT?
select xmlelement(NOENTITYESCAPING e,id,'->')
from (select level as id
from dual
connect by level < 6)
XMLELEMENT(NOENTITYESCAPINGE,ID,'->')
---------------------------------------
<E>1-></E>
<E>2-></E>
<E>3-></E>
<E>4-></E>
<E>5-></E>
Ora, aggiungendo EXTRACT
:
select xmlelement(NOENTITYESCAPING e,id,'->').extract('//text()')
from (select level as id
from dual
connect by level < 6)
XMLELEMENT(NOENTITYESCAPINGE,ID,'->').EXTRACT('//TEXT()')
----------------------------------------------------------
1->
2->
3->
4->
5->
Eventuali correzioni/soluzioni alternative per mantenere il escape spento? Il manual non fornisce alcun aiuto.
Grazie Nicola. Vedo che hai aggiornato la tua risposta mentre stavo per commentare che sto usando XMLAGG (per aggirare il limite di 4000 caratteri di LISTAGG), e che extractvalue non funzionerà con quello. Ho provato la tua raccomandazione di utl_i18n.unescape_reference, tuttavia penso che stia colpendo anche il limite di 4000 caratteri. – TrojanName
Ecco la mia query corrente, che dimostra il problema: selezionare rtrim (xmlagg (xmlelement (e, id, '->'). Extract ('// text()') ordina da id) .GetClobVal(), ',') da (selezionare il livello come id da dual connect per livello <6) – TrojanName
@TrojanName 'Penso che stia colpendo anche il limite di 4000 caratteri 'Sì. La funzione 'unescape_reference()' accetta i valori 'varchar2'. Per elaborare stringhe "* big *" usa la funzione 'dbms_xmlgen.convert()'. La risposta è stata aggiornata. –