Oracle 11g。我發現如果我將NOENTITYESCAPING
添加到XMLELEMENT
函數中,它很好地關閉了實體轉義。但是,當我將結果傳遞給EXTRACT
時,轉義似乎又回來了。Oracle的EXTRACT函數是否打破了XMLELEMENT中的NOENTITYESCAPING?
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>
現在,加入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->
任何修復/解決方法,以保持逃逸關掉? manual沒有幫助。
感謝尼古拉。我看到你更新了你的答案,因爲我只是想評論一下,因爲我使用的是XMLAGG(解決LISTAGG的4000字符限制),並且該提取值將不起作用。我試過你的建議utl_i18n.unescape_reference,但我認爲這也達到了4000字符的限制。 – TrojanName
這裏是我當前的查詢,它演示了這個問題:select rtrim(xmlagg(xmlelement(e,id,' - >')。extract('// text()')order by id).GetClobVal(),',' ) from(select level from id from double connect by level <6) – TrojanName
@TrojanName'我認爲那也是達到了4000個字符的限制'是的。 'unescape_reference()'函數接受'varchar2'的值。要處理「* big *」字符串,請使用'dbms_xmlgen.convert()'函數。答案已更新。 –