【问题标题】:xml to oracle databasexml到oracle数据库
【发布时间】:2018-08-15 03:58:13
【问题描述】:

我必须将一个 xml 文件导入到 oracle 数据库中,但该文件具有以下结构:

任务:

  1. 解析给定的 XML 文件并将其导入 Oracle 数据库
  2. 基于 XML 结构创建数据库

xml 文件:

  <root>
    <customers>
     <customer id=1>e-mag</customer>
     <customer id=2>Eurofigher</customer>
    </customers>
    <customer_invoices>
     <invoice id=1>
      <customer_id>1</customer_id>
      <items>
       <item id=1 unit_value=10 tva=21 units=5>Laptop</item>
       <item id=2 unit_value=20 tva=21 units=3>Monitors</item>
      </items>
     </invoice> 
    </customer_invoices>
  </root>

最好的方法是什么? 请帮我。

【问题讨论】:

    标签: xml database oracle


    【解决方案1】:

    如果您想以关系结构导入它们。 首先将其加载到 XMLTYPE 列中

    DROP TABLE XMLTEST;
    
    CREATE TABLE XMLTEST
    (   XML_COL XMLTYPE);
    
    DECLARE
      poXML CLOB; 
    BEGIN   
      -- Store the Purchase Order XML in the CLOB variable
      poXML := '<?xml version="1.0"?>
    <rooms>
        <room room_id="1">
            <alt_id>88</alt_id>
            <display_naam>01 West 430</display_naam>
            <alt_db>eXpress_BK</alt_db>
        </room>
        <room room_id="2">
            <alt_id>170</alt_id>
            <display_naam>02 Midden 010</display_naam>
            <alt_db>eXpress_BK</alt_db>
        </room>
        <room room_id="3">
            <alt_id>173</alt_id>
            <display_naam>02 Midden 110</display_naam>
            <alt_db>eXpress_BK</alt_db>
        </room>
        <room room_id="4">
            <sil_id>F491B0A119DABE76B2F6B2C0A3E902F6</sil_id>
            <alt_id>183</alt_id>
            <display_naam>02 Oost 010</display_naam>
            <alt_db>eXpress_BK</alt_db>
        </room>
        <room room_id="5">
            <alt_id>172</alt_id>
            <display_naam>02 Oost 300</display_naam>
            <alt_db>eXpress_BK</alt_db>
        </room>
      .
      .
      .
        <room room_id="126">
            <sil_id>F491B0A119DABE76B2F6B2C0A3E901E3</sil_id>
            <alt_id>129</alt_id>
            <display_naam>HB.02.140</display_naam>
            <alt_db>eXpress_EWI</alt_db>
        </room>
    </rooms>';
    
      INSERT INTO xmltest (xml_col) VALUES (XMLTYPE(poXML));
    
    END;
    

    然后根据 XML 结构创建一个表

    drop table rooms;
    create table rooms as 
    select xt.room_id
    ,      xt.alt_id
    ,      xt.sil_id
    ,      xt.alt_db
    ,      xt.display_naam
    from xmltest xts
    ,    XMLTable('rooms/room' PASSING xts.xml_col 
                       columns room_id INTEGER PATH '@room_id'
                                 ,alt_id INTEGER PATH 'alt_id'
                                 ,sil_id VARCHAR2(100) PATH 'sil_id'
                                 ,display_naam VARCHAR2(100)PATH 'display_naam'
                                 ,alt_db VARCHAR2(100)PATH 'alt_db') xt;
    

    我认为您将不得不创建三个创建表语句。一种用于客户,一种用于 customer_invoices,另一种用于 cursomer_invoice_items,因为它们显然不适合放在一个关系表中。

    【讨论】: