Oracle 如何更改XMLTYPE变量的字符集?
我目前使用的是非utf-8DB,但我需要使用utf-8编码生成XMLType变量。我有一个解决办法,但Oracle中似乎存在缺陷,请参阅以下链接: …和Oracle支持错误:7698684 该错误会导致随机错误Oracle 如何更改XMLTYPE变量的字符集?,oracle,plsql,blob,xmltype,Oracle,Plsql,Blob,Xmltype,我目前使用的是非utf-8DB,但我需要使用utf-8编码生成XMLType变量。我有一个解决办法,但Oracle中似乎存在缺陷,请参阅以下链接: …和Oracle支持错误:7698684 该错误会导致随机错误 ORA-1482: unsupported character set ORA-6512: at "SYS.XMLTYPE", line 107 首先,我使用dbms_xmlgen包获得XMLType。该XMLType使用DB字符集编码 要将其转换为utf-8字符集,我执行以下操作:
ORA-1482: unsupported character set
ORA-6512: at "SYS.XMLTYPE", line 107
首先,我使用dbms_xmlgen包获得XMLType。该XMLType使用DB字符集编码
要将其转换为utf-8字符集,我执行以下操作:
- 我使用NLS_CHARSET_ID使用getBlobVal方法将XMLType变量转换为BLOB变量 ('UTF8')作为参数
- 我使用XMLType构造函数方法将BLOB变量转换回XMLType,使用BLOB变量作为第一个参数和NLS_CHARSET_ID ('UTF8')作为第二个参数这会导致随机错误:(
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);
我用convert函数实现了这一点,它不可能转换整个xml文档(甚至是它的clob值),只能转换元素值 这不起作用(XMLType构造函数失败): 因此,我必须将convert转换为查询字符串(这只是一个示例):
最后,我创建了一个函数,该函数读取字典并循环给定表/视图的所有列,并生成select语句字符串,其中所有列分别转换为UTF8。然后,可以将该字符串作为参数传递给dbms_xmlgen.newContext函数。在它的文档中,您在哪里找到了?的定义没有被列为有参数,至少写在这里:它似乎没有文档(可能是文档错误),但你是对的。你运行的是什么版本?顺便说一下,我现在不会写答案,因为我没有时间查找引用,但我很确定XMLType是抽象的,没有字符集(就像日期没有格式一样)。将XMLType转换为可读/可导出格式时,将选择字符集。11g R2(不记得详细版本,但可以明天检查).XMLType保留自己的字符集信息。我非常确定这一点,因为我通过11g本机web服务返回XMLType变量,如果我进行utf-8编码,那么它将使用utf-8公开web服务!否则它将通过使用DB字符集编码的web服务返回xml。
l_xml := XMLType(convert(l_xml.getClobVal, 'UTF8'));
select dbms_xmlgen.getXMLType(
q'{select convert('ä', 'UTF8') myValue from dual}')
from dual