【问题标题】:XML to Oracle database column mappingXML 到 Oracle 数据库列的映射
【发布时间】:2012-05-31 06:04:43
【问题描述】:

我正在处理我们收到的 xml 消息。我必须阅读 xml 并存储在 4 个不同的表中。

处理此问题的最佳方法是什么。假设 xml 架构发生了变化,那么可能会添加新列,或者删除或重命名列等...

我们如何才能实现这种松散耦合。对 XML 或数据库的任何更改都不需要更改代码吗?

谢谢,

【问题讨论】:

  • xml 存入数据库后如何使用?只是为了审计目的?你真的会解析xml并关联存储吗?
  • @tbone。我们从 Tibco EMS 读取 XML。然后首先将 xml 消息存储在 clob 字段中。稍后我们检索 XML 并解析它,必须从 XML 中提取值并存储在 4 个不同的表中。
  • 我们计划用数据库列名和表名做XPath映射。但是在 C# 中,我们如何在未来对 XML 或数据库的更改不需要更改代码的情况下实现可扩展性。而且在未来,我们可能需要解析不同的 XML,即来自其他 XML 提供程序。我们可能会从超过 1 个提供者那里获得不同模式的 XML。

标签: c# xml oracle mapping xsd


【解决方案1】:

不确定您打算如何使用存储在 Oracle 中的 XML,但如果只是出于审计目的而存储,您可以将 XML 连同版本号和一些日期一起存储在 CLOB 字段中。在单独的参考表中,将 xml 版本号与其 dtd(以及创建/修改日期)关联起来。

【讨论】:

  • 我们从 Tibco EMS 读取 XML。然后首先将 xml 消息存储在 clob 字段中。稍后我们检索 XML 并解析它,必须从 XML 中提取值并存储在 4 个不同的表中。
【解决方案2】:

如果您使用的是 Oracle 11G,您可以创建 XMLTYPE 变量 在 PL/SQL 过程中,然后您可以使用 extract() 函数 仅检索您希望成为字段的 XML 文档部分。

在声明一个 XMLTYPE 类型的 PL/SQL 变量后, 使用 XMLTYPE.CREATEXML( ) 函数创建一个 XMLTYPE 变量。

V_INPUT_XML  := XMLTYPE.CREATEXML(V_TAB.INPUT_MESSAGE);

extract() PL/SQL 函数返回一个 XMLTYPE,我有 使用 getclobval() 将 XMLTYPE 转换为 VARCHAR。

--V_OUTPUT_XML is set by a result of the extract() function 
--on an XMLTYPE
V_OUTPUT_STR := v_output_xml.getclobval();

至少有了这个,你只需要改变你的 PL/SQL,如果 您正在设置更改的字段的路径;的变化 字段之外的 XML 文档(只要它们不 影响 XPATH 到字段)不应该需要更改 PL/SQL..

【讨论】:

  • @A B 目前我们的数据库是 10g。计划 11g 但不确定何时会发生。我们计划用 C#(LINQ to XML)而不是 Oracle XML 特性进行解析。
猜你喜欢
  • 2013-06-12
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多