Forum Stats

  • 3,839,099 Users
  • 2,262,455 Discussions
  • 7,900,863 Comments

Discussions

DBMS_XMLQUERY to DBMS_XMLGEN (11g to 19c migration) - setEncodingTag missing?

Niall
Niall Member Posts: 27 Blue Ribbon

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 ondeclare  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 ondeclare  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'?>

Tagged: