Sql ORA-19011:字符串缓冲区太小-Oracle中的正则表达式替换缓冲区限制是否有字符限制?

Sql ORA-19011:字符串缓冲区太小-Oracle中的正则表达式替换缓冲区限制是否有字符限制?,sql,xml,oracle,oracle11g,Sql,Xml,Oracle,Oracle11g,当我尝试执行下面的代码时,我得到了以下错误 ORA-19011:字符串缓冲区太小 filecontent是类型为XMLTYPE的列。我们将在本专栏中存储一个XML文件 如果xml文件内容>4000个字符,则会发生此错误。若xml文件中的任何一个小于4000个字符,则不会发生此错误。我们在Oracle 11G中。因此,根据文档,我们应该能够在filecontent列中存储4GB的内容。我认为问题在于REGEXP_REPLACE函数,它试图读取文件内容,而缓冲区正面临这个问题。我可能错了。非常感谢您

当我尝试执行下面的代码时,我得到了以下错误

ORA-19011:字符串缓冲区太小

filecontent是类型为XMLTYPE的列。我们将在本专栏中存储一个XML文件


如果xml文件内容>4000个字符,则会发生此错误。若xml文件中的任何一个小于4000个字符,则不会发生此错误。我们在Oracle 11G中。因此,根据文档,我们应该能够在filecontent列中存储4GB的内容。我认为问题在于REGEXP_REPLACE函数,它试图读取文件内容,而缓冲区正面临这个问题。我可能错了。非常感谢您在这方面提供的任何帮助。

Oracle似乎正在尝试将filecontent列或返回值转换为大小限制为4000的CHAR或VARCHAR2

的预期输入数据类型为CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB或NCLOB。返回类型规则是:如果第一个参数不是LOB,则函数返回VARCHAR2;如果第一个参数是LOB,则函数返回CLOB


如果可以将filecontent列转换为CLOB,则REGEXP\u REPLACE应能正常工作并返回CLOB数据类型。

谢谢Llama。这解决了我的问题。我将文件内容存储为clob,它解决了这个问题。接受你的回答
SELECT   filecontent
            FROM
      (SELECT  XMLTYPE(REGEXP_REPLACE(filecontent, '<Transaction .*>', '<Transaction>')) filecontent
       FROM example_table where somecondition = true)
       ) xmlContent