Hi,
I'm migrating a suite of package from 11g to 19c.
In most cases, I can directly replace calls to the desupported DBMS_XMLQUERY package by calls to the DBMS_XMLGEN package and things keep working.
However, there is a DBMS_XMLQUERY procedure called setEncodingTag that doesn't seem to have a DBMS_XMLGEN equivalent.
Here's a DBMS_XMLQUERY snippet that produces some simple XML
set serveroutput on
declare
v_context dbms_xmlquery.ctxtype;
v_xml clob;
v_sql varchar2(32767);
begin
v_sql := 'select * from dual';
v_context := dbms_xmlquery.newContext(v_sql);
-- Change XML tags
dbms_xmlquery.setRowsetTag(v_context,'DUALS');
dbms_xmlquery.setRowTag(v_context,'DUAL');
-- UTF-8 encoding
dbms_xmlquery.setEncodingTag(v_context,dbms_xmlquery.db_encoding);
-- Create XML type for XML
v_xml := dbms_xmlquery.getXML(v_context);
dbms_output.put_line(v_xml);
end;
/
This is the XML output
<?xml version = '1.0' encoding = 'UTF-8'?>
<DUALS>
<DUAL num="1">
<DUMMY>X</DUMMY>
</DUAL>
</DUALS>
Here is the equivalent with DBMS_XMLGEN. The dbms_xmlgen.setEncodingTag is commented out because this procedure doesn't exist in DBMS_XMLGEN.
set serveroutput on
declare
v_context dbms_xmlgen.ctxType;
v_xml clob;
v_sql varchar2(32767);
begin
v_sql := 'select * from dual';
v_context := dbms_xmlgen.newContext(v_sql);
-- Change XML tags
dbms_xmlgen.setRowsetTag(v_context,'DUALS');
dbms_xmlgen.setRowTag(v_context,'DUAL');
-- UTF-8 encoding
--dbms_xmlgen.setEncodingTag(v_context,dbms_xmlgen.db_encoding);
-- Create XML type for XML
v_xml := dbms_xmlgen.getXML(v_context);
dbms_output.put_line(v_xml);
end;
/
This is the XML output
<?xml version="1.0"?>
<DUALS>
<DUAL>
<DUMMY>X</DUMMY>
</DUAL>
</DUALS>
The difference between the two is the first line i.e. <?xml version = '1.0' encoding = 'UTF-8'?> vs. <?xml version="1.0"?>.
Is there any way to force the encoding attribute to be output in an environment (19c) where DBMS_XMLQUERY is no longer available?
Thanks for your help.
Niall.
T
hdkqjhadjghdIsl version = '1.0' encoding = 'UTF-8'?>