当我尝试执行以下代码时出现以下错误。
ORA-19011:字符串缓冲区太小
SELECT filecontent
FROM
(SELECT XMLTYPE(REGEXP_REPLACE(filecontent, '<Transaction .*>', '<Transaction>')) filecontent
FROM example_table where somecondition = true)
) xmlContent
filecontent是一个类型为XMLTYPE的列。我们在此列中存储XML文件。
如果xml文件内容为&gt;,则会发生此错误。 4000个字符。如果任何xml文件具有&lt; 4000个字符不会发生此错误。我们在Oracle 11G中。因此,根据文档,我们应该能够在 filecontent 列中存储4GB内容。我认为问题是REGEXP_REPLACE函数,它试图用缓冲区读取我们正面临这个问题的文件内容。我可能错了。在这方面的任何帮助都非常感谢。
答案 0 :(得分:1)
似乎Oracle正在尝试将filecontent
列或返回值转换为CHAR或VARCHAR2,其大小限制为4000.
REGEXP_REPLACE的预期输入数据类型是CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB。返回类型规则是:&#34;如果第一个参数不是LOB,则函数返回VARCHAR2,如果第一个参数是LOB,则返回CLOB。&#34;
如果您可以将filecontent
列转换为CLOB,则REGEXP_REPLACE应该可以正常工作并返回CLOB数据类型。