Skip to Main Content

Oracle Database Discussions

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

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

NiallJul 24 2020

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

Comments

Post Details

Added on Jul 24 2020
0 comments
1,243 views