【发布时间】:2018-02-01 07:43:21
【问题描述】:
我正在尝试从 CLOB 列创建 XMLTYPE 并明确指定字符集。我发现有一个接受字符集的重载 XMLTYPE.createXML 函数,但是当我执行传递其他参数时出现错误。为什么?
SELECT
XMLTYPE.createXML(TO_CLOB ('<node1><node2>the ´ character</node2></node1>'),NLS_CHARSET_ID('AL32UTF8'),'',1,1)
from dual;
错误:
ORA-06553:PLS-306:调用中的参数数量或类型错误 'CREATEXML'
我费心传递字符集的原因是,CLOB 列包含使用与数据库字符集不同的字符集编码的字符(例如不支持#180)。
【问题讨论】:
-
我正在查看此处的文档:docs.oracle.com/database/121/ARPLS/t_xml.htm#ARPLS71959,但我没有看到您提到的选项。你在哪里找到超载的?您确定它是针对 Oracle 的(而不是针对 Java 或其他谁知道的)?
-
您的 CLOB 是纯 ASCII - 为什么需要指定任何字符集?
-
查找 csid IN 编号参数,请参阅 docs.oracle.com/database/121/ARPLS/t_xml.htm#ARPLS71959。
... 只是一个例子。 createXML 将使用包含无法使用数据库 NLS_CHARACTERSET 字符集解码的特殊字符的列执行。 -
那么您必须提供
BLOB而不是CLOB。查看DBMS_LOB.CONVERTTOBLOB 将给定的 CLOB 转换为 BLOB。