我目前正在使用非utf-8数据库,但我需要使用utf-8编码生成XMLType变量。我有一个解决方法但是Oracle中似乎存在错误,请参阅以下链接: https://forums.oracle.com/forums/thread.jspa?messageID=10238641
...和Oracle支持错误:7698684
该错误导致随机
ORA-1482: unsupported character set
ORA-6512: at "SYS.XMLTYPE", line 107
首先,我使用dbms_xmlgen包获取XMLType。该XMLType使用DB字符集进行编码。
要将其转换为utf-8字符集我喜欢这样:
有人知道任何替代解决方案吗?
l_xml := dbms_xmlgen.getXMLType(l_ctx);
l_xml_b := l_xml.getBlobVal(C_UTF8_CHARSET_ID);
l_xml := XMLType(l_xml_b, C_UTF8_CHARSET_ID);
答案 0 :(得分:0)
我设法用转换功能做到了这一点。无法转换整个xml文档(甚至是它的clob值),只能转换元素值。
这不起作用(XMLType构造函数失败):
l_xml := XMLType(convert(l_xml.getClobVal, 'UTF8'));
所以我不得不将convert转换为查询字符串(这只是一个例子):
select dbms_xmlgen.getXMLType(
q'{select convert('ä', 'UTF8') myValue from dual}')
from dual
最后,我创建了一个函数,它读取字典并循环遍历给定表/视图的所有列,并生成select语句字符串,其中所有列都单独转换为UTF8。然后可以将此字符串作为参数传递给dbms_xmlgen.newContext函数。