【问题标题】:How to insert large XML string into an Oracle Table?如何将大型 XML 字符串插入 Oracle 表?
【发布时间】:2015-02-20 10:59:01
【问题描述】:

我想在我的表中插入一个大的 XML 字符串。我的表是 test_id(xml_column XMLType)。

当我插入值时,它返回“字符串文字太长”错误。我在网上冲浪,每个人都说将数据类型更改为 CLOB。但我想存储相同的数据类型(XMLType)。

有没有可能做到这一点。谁能帮我解决这个问题。

这是我的代码:

insert into TEST_ID(xml_column) values('<root>
  <DatabaseLog>
    <DatabaseLogID>1</DatabaseLogID>
    <PostTime>2012-03-14T13:14:18.803</PostTime>
...
<object>StoreSurveySchemaCollection</object>
  </DatabaseLog>
</root>');

错误代码是:

PLS-00172: string literal too long

感谢您的建议。

【问题讨论】:

    标签: string oracle xmltype


    【解决方案1】:

    从 Oracle 11g 开始,XMLTYPE 值的最大大小为 2G/4G,具体取决于您的字符集。这与CLOB 类型相同。但是,这里的问题不在于 content 对于XMLTYPE 来说太大了。您在查询中使用的 litteral VARCHAR 太长了。错误信息非常清楚:

    PLS-00172:字符串文字太长

    一个解决方案(虽然不是一个非常优雅的解决方案)是将你的字符串分成几部分,分配给一个CLOB 变量:

    xmlDoc CLOB := 'xml chunk #1';
    ...
    xmlDoc := xmlDoc || 'xml chunk #2';
    xmlDoc := xmlDoc || 'xml chunk #3';
    
    ...
    insert into TEST_ID(xml_column) values(xmlDoc);
    

    【讨论】:

    • 您可以使用 yourXML.GETCLOBVAL() 从 xmltype 获取 CLOB。
    • Sylvain,当我们不知道 json 字符串的大小并想在 XMLTYPE 中插入时,如何动态进行此操作?
    猜你喜欢
    • 2022-07-11
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 2018-12-27
    相关资源
    最近更新 更多