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

时间:2012-05-31 20:56:19

标签: xml oracle xsd xmltype oracle-xml-db

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

更新

目前,我正在考虑将XML DB与存储在结构化存储中的数据结合使用。所以我理解我可以定义带有注释的XML Schema,我知道所涉及的步骤,但我希望得到以下问题的确认答案:

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

2 个答案:

答案 0 :(得分:11)

您肯定希望从XMLDB开始。

XMLDB本身就是一个完整的特性和功能世界。

非常简单,您有三个存储选项w / 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

答案 1 :(得分:2)

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

我建议将其称为“构建Oracle XML DB应用程序”,购买并预留两天阅读和尝试。