如何将大型XML字符串插入Oracle表?

时间:2014-12-22 10:43:43

标签: string oracle xmltype

我想在表格中插入一个大的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

感谢您的建议。

1 个答案:

答案 0 :(得分:5)

从Oracle 11g开始,XMLTYPE值的最大大小为2G / 4G,具体取决于您的字符集。这与CLOB类型相同。但是,问题不在于内容对于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);