【问题标题】:ORA-19011: Character string buffer too small - Is there a character limit on Regex_replace buffer limit in Oracle?ORA-19011: 字符串缓冲区太小 - Oracle 中的 Regex_replace 缓冲区限制是否有字符限制?
【发布时间】:2015-12-29 16:23:38
【问题描述】:

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

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

SELECT   filecontent
            FROM
      (SELECT  XMLTYPE(REGEXP_REPLACE(filecontent, '<Transaction .*>', '<Transaction>')) filecontent
       FROM example_table where somecondition = true)
       ) xmlContent

filecontent 是一个类型为 XMLTYPE 的列。我们在此列中存储了一个 XML 文件。

如果 xml 文件内容超过 4000 个字符,则会出现此错误。如果任何 xml 文件的长度小于 4000 个字符,则不会发生此错误。我们在 Oracle 11G 中。因此,根据文档,我们应该能够在 filecontent 列中存储 4GB 的内容。我在想问题是 REGEXP_REPLACE 函数试图读取我们在缓冲区中遇到这个问题的文件内容。我可能错了。非常感谢这方面的任何帮助。

【问题讨论】:

    标签: sql xml oracle oracle11g


    【解决方案1】:

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

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

    如果您可以将 filecontent 列转换为 CLOB,则 REGEXP_REPLACE 应该可以正常工作并返回 CLOB 数据类型。

    【讨论】:

    • 谢谢拉玛。这解决了我的问题。我将文件内容存储为一个clob,它解决了这个问题。接受你的回答
    猜你喜欢
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多