gpt4 book ai didi

oracle - 如何更改 XMLTYPE 变量的字符集?

转载 作者:行者123 更新时间:2023-12-02 05:07:02 28 4
gpt4 key购买 nike

我目前拥有非 utf-8 数据库,但我需要使用 utf-8 编码生成 XMLType 变量。我有一个解决方法,但 Oracle 中似乎存在错误,请参见以下链接: https://forums.oracle.com/forums/thread.jspa?messageID=10238641

...和 ​​Oracle 支持错误:7698684

bug导致随机

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') 作为参数
  • 我使用 BLOB 变量作为第一个参数和 NLS_CHARSET_ID 使用 XMLType 构造方法将 BLOB 变量转换回 XMLType('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 构造函数失败):

l_xml := XMLType(convert(l_xml.getClobVal, 'UTF8'));

所以我不得不将转换为查询字符串(这只是一个例子):

select dbms_xmlgen.getXMLType(
q'{select convert('ä', 'UTF8') myValue from dual}')
from dual

最后我做了一个函数,它读取字典并循环遍历给定表/ View 的所有列并生成 select 语句字符串,其中所有列都分别转换为 UTF8。然后可以将该字符串作为参数传递给 dbms_xmlgen.newContext 函数。

关于oracle - 如何更改 XMLTYPE 变量的字符集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9907001/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com