In removing the deprecated extract/extractValue methods from my queries, I have run into an issue with character data being extracted via XMLTable.
Character entity encoded data (e.g. "'" as "'") was decoded by extractValue, but remains encoded by XMLTable. For example:
WITH myXML AS
(
SELECT XMLTYPE.createXML('<root desc="Here' || chr(38) || 'apos;s an example"/>') AS x
FROM dual
)
SELECT
x,
extractValue(x, '/root/@desc'),
mytab.example,
XMLQuery('/root/@desc' PASSING x RETURNING CONTENT).getStringVal()
FROM
myXML,
XMLTable
(
'/root'
PASSING myXML.x
COLUMNS
example VARCHAR2(39) PATH '@desc'
) mytab;
returns
<root desc="Here's an example"/> Here's an example Here's an example Here's an example
Wrapping each column in the SELECT clause in dbms_xmlgen.convert() seems like overkill. Am I doing something wrong?
Thanks.