如何将 XML 数据存储到 Oracle 表中

Posted

技术标签:

【中文标题】如何将 XML 数据存储到 Oracle 表中【英文标题】:How to store XML data into Oracle tables 【发布时间】:2012-06-06 03:43:57 【问题描述】:

在我们的业务中,我们每天接收并需要处理数千个 XML 文件,所有这些文件都采用相同的格式。我们希望将这些数据存储到oracle表中,并保留这些数据的层次关系,然后我们可以使用传统的SQL查询它们并做进一步的分析。最好的方法是什么? XML DB 是正确的选择吗?

更新:

目前,我正在考虑将 XML DB 与存储在结构化存储中的数据一起使用。所以我知道我可以定义一个带有注释的 XML 模式,并且我知道所涉及的步骤,但我想得到以下问题的确认答案:

    我可以注释一个 XML Schema 来为父子关系创建多个表吗?我希望将数据存储在关系表中,而不是对象中。 我可以为所有这些表定义主键、外键吗?我不太清楚 Oracle 如何维护这些表中的父子关系。 谁能给我一个很好的例子?

【问题讨论】:

【参考方案1】:

有一本好书,我用过它,它帮助我解决了所有基本问题。它是关于 Oracle 11g 的,但它也可用于 12c。

它叫“构建Oracle XML DB应用程序”,我建议,购买它并预留两天时间阅读和尝试。

【讨论】:

【参考方案2】:

您肯定想从 XMLDB 开始。

XMLDB 本身就是一个包含各种特性和功能的世界。

简而言之,您有三个存储选项,包括 XMLDB 和 XMLTYPE 数据。

您可以存储:

1.) 转换为 CLOB 数据类型。如果您这样做,XML 只是位于数据库中,它是一个 LOB。你不能索引它,搜索它等等。数据库是一个有点桶,你存储 XML。

2.) BINARY XML:这是 11gR2 中引入的最新选项。这将对 XML 进行标记和压缩,并以编码的二进制格式存储。此处的优点是您可以使用 Oracle Text 和 XMLINDEX 域索引来索引和搜索内容。这是我最有经验的选择。我们有十亿个文档,平均大小约为 12k,存储在 11gR2 数据库中。它对我们来说非常有效。

3.) XML 到关系映射:您定义一个关系模式以将数据存储在您的 XML 模式中,并定义 XML 元素如何映射到哪些关系表和字段。在摄取时,XML 被分解并存储到传统的关系模型中。然后,您可以像搜索任何传统数据库一样进行搜索、排序、索引。

这真的取决于你想做什么,至于你选择使用哪种 XML 存储模型。

您可以尝试在 Oracle XMLDB 论坛上提问。它非常活跃,并且有一些人比我更了解这个主题。 https://forums.oracle.com/forums/forum.jspa?forumID=34

希望对您有所帮助。

回复更新 1:

我真的只有二进制 XML 存储选项的经验,抱歉。我认为检查 OTN 上的 XMLDB 示例代码会很有用。

请看:

http://www.oracle.com/technetwork/indexes/samplecode/xmldb-sample-523617.html

【讨论】:

由于 OP 想要跨 XML 运行查询,我推荐选项 #2 或可能 #3。 非常感谢。 3)选项是我的想法,但我对此有一些疑问。你的帖子有点回答了我心中的问题,但我仍然想清楚地确认它。我会将我的问题添加到原始帖子中。

以上是关于如何将 XML 数据存储到 Oracle 表中的主要内容,如果未能解决你的问题,请参考以下文章

如何设置“以属性的形式将xml数据插入到SQL Server2008数据库的表中”的存储过程

oracle plsql:如何解析 XML 并插入到表中

xml解析和存储数据

如何在oracle数据库表中存储双冒号值

无法将值存储到 oracle 中的嵌套表中

如何把数据库里的数据导出到EXcl表中