Discussions
Categories
- 197K All Categories
- 2.5K Data
- 546 Big Data Appliance
- 1.9K Data Science
- 450.8K Databases
- 221.9K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 552 MySQL Community Space
- 479 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3.1K ORDS, SODA & JSON in the Database
- 556 SQLcl
- 4K SQL Developer Data Modeler
- 187.2K SQL & PL/SQL
- 21.4K SQL Developer
- 296.4K Development
- 17 Developer Projects
- 139 Programming Languages
- 293K Development Tools
- 110 DevOps
- 3.1K QA/Testing
- 646.1K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 159 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.2K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 19 Java Essentials
- 162 Java 8 Questions
- 86K Java Programming
- 81 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.3K Java SE
- 13.8K Java Security
- 205 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 468 LiveLabs
- 39 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 175 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 233 Portuguese
DBMS_XMLQUERY to DBMS_XMLGEN (11g to 19c migration) - setEncodingTag missing?

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