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

标签 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

感谢您的建议。

最佳答案

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

PLS-00172: string literal too long

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

xmlDoc CLOB := 'xml chunk #1';
...
xmlDoc := xmlDoc || 'xml chunk #2';
xmlDoc := xmlDoc || 'xml chunk #3';

...
insert into TEST_ID(xml_column) values(xmlDoc);

关于string - 如何将大型 XML 字符串插入 Oracle 表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27601085/

相关文章:

sql - 在 Oracle 中选择随机行

sql - 建立会计试算平衡报告绩效问题

xml - 检查 XMLType 节点值并根据需要进行更新

java - JAXB Schemagen(v.7.0.450.18): change XmlElement name and XmlType(propOrder={. ..})

Java 输入流到字符串(如果是句子)

c++ - 此代码似乎在分配范围之外附加字符

c++ - std::string、std::wstring 和 UTF8

sql - Oracle 10g - 链接两个具有不同用户权限的 View

sql - 如何从 XMLType 节点中提取元素路径?

java - 在 Java 中连接空字符串时在编译和运行时会发生什么?