考虑以下SQLFiddle:http://sqlfiddle.com/#!4/888bc/1,它承载以下PL / SQL函数:
create or replace function GetSymbol return clob is
v_domdocument dbms_xmldom.DOMDocument;
v_root_node dbms_xmldom.DOMNode;
v_root_child dbms_xmldom.DOMNode;
v_text dbms_xmldom.DOMNode;
v_xmltype xmltype;
begin
v_domdocument := dbms_xmldom.newDOMDocument;
dbms_xmldom.setVersion(v_domdocument, '1.0" encoding="UTF-8');
dbms_xmldom.setCharset(v_domdocument, 'UTF-8');
v_root_node := dbms_xmldom.makeNode(v_domdocument);
v_root_child := dbms_xmldom.appendChild(v_root_node,
dbms_xmldom.makeNode(dbms_xmldom.createElement(v_domdocument, 'root')));
v_text := dbms_xmldom.appendChild(v_root_child,
dbms_xmldom.makeNode(dbms_xmldom.createTextNode(v_domdocument, NCHR(8364)))); -- Euro symbol
v_xmltype := dbms_xmldom.getxmltype(v_domdocument);
return v_xmltype.getClobVal;
end;
如果我执行以下SELECT语句:
select GetSymbol from dual;
...然后,SQLFiddle返回以下XML:
<?xml version="1.0" encoding="UTF-8"?> <root>€</root>
到目前为止,一切都很好。但是,如果我在Oracle 11g数据库上尝试此操作,则会突然得到:
<?xml version="1.0" encoding="UTF-8"?> <root>¿</root>
也就是说,在NVARCHAR2-> dbms_xmldom.DOMNode / dbms_xmldom.DOMDocument-> xmltype-> CLOB之间的转换过程中,欧元符号被“转换”为一个倒置的问号,如上所示。
关于正在发生的事情以及如何解决这个问题的任何想法?我的目标是返回正确显示欧元符号的XML。