0

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>

それを行う最善の方法は何ですか?私を助けてください。

4

1 に答える 1

2

それらをリレーショナル構造でインポートする場合。最初に 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;

3 つの create table ステートメントを作成する必要があると思います。1 つは顧客用、もう 1 つは customer_invoices 用、もう 1 つは cursomer_invoice_items 用です。これらは明らかに 1 つのリレーショナル テーブルに収まらないからです。

于 2012-10-16T13:43:42.897 に答える