ORA-19011:字符串缓冲区太小 - Oracle中的Regex_replace缓冲区限制是否有字符限制?

时间:2015-10-01 14:48:50

标签: sql xml oracle oracle11g

当我尝试执行以下代码时出现以下错误。

  

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函数,它试图用缓冲区读取我们正面临这个问题的文件内容。我可能错了。在这方面的任何帮助都非常感谢。

1 个答案:

答案 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数据类型。