2

XML ファイルから SQL Loader 経由で Oracle にロードしようとしている列の一部が null です。たとえば、いくつかが埋められているかもしれませんが、時折いくつかのヌルがあります。

一部のデータが NULL になることを SQL*Loader に伝える方法、または NULL を処理する方法を教えてください。

4

2 に答える 2

1

jonearlesが提案したように。XMLTABLE を使用して、XML データをリレーショナル テーブルに挿入します。まず、XML データを Oracle テーブルの 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"?>
<zalen>
    <zaal zaal_id="1">
        <alt_id>88</alt_id>
        <display_naam>01 West 430</display_naam>
        <alt_db>exp_BB</alt_db>
    </zaal>
    <zaal zaal_id="2">
        <alt_id>170</alt_id>
        <display_naam>02 Midden 010</display_naam>
        <alt_db>exp_BB</alt_db>
    </zaal>
    <zaal zaal_id="3">
        <alt_id>173</alt_id>
        <display_naam>02 Midden 110</display_naam>
        <alt_db>exp_BB</alt_db>
    </zaal>
    <zaal zaal_id="4">
        <syl_id>F491B0A119DABE76B2F6B2C0A3E902F6</syl_id>
        <alt_id>183</alt_id>
        <display_naam>02 Oost 010</display_naam>
        <alt_db>exp_BB</alt_db>
    </zaal>
    <zaal zaal_id="5">
        <alt_id>172</alt_id>
        <display_naam>02 Oost 300</display_naam>
        <alt_db>exp_BB</alt_db>
    </zaal>
  .
  .
  .
    <zaal zaal_id="126">
        <syl_id>F491B0A119DABE76B2F6B2C0A3E901E3</syl_id>
        <alt_id>129</alt_id>
        <display_naam>HB.02.140</display_naam>
        <alt_db>exp_EE</alt_db>
    </zaal>
</zalen>';

  INSERT INTO xmltest (xml_col) VALUES (XMLTYPE(poXML));

END;
/

XMLTable 関数を使用してテーブルを作成 (または挿入) します。

drop table zalen;
create table zalen as 
select xt.zaal_id
,      xt.alt_id
,      xt.syl_id
,      xt.alt_db
,      xt.display_naam
from xmltest xts
,    XMLTable('zalen/zaal' PASSING xts.xml_col 
                   columns zaal_id INTEGER PATH '@zaal_id'
                             ,alt_id INTEGER PATH 'alt_id'
                             ,syl_id VARCHAR2(100) PATH 'syl_id'
                             ,display_naam VARCHAR2(100)PATH 'display_naam'
                             ,alt_db VARCHAR2(100)PATH 'alt_db') xt;
于 2010-12-06T08:03:19.853 に答える
0

ファイルを読み込んで変換する方法を再考することをお勧めします。これはあなたの他の質問に関連していると思います。その場合、独自の XML パーサーを構築しているようです。オラクル社は、これを行うのに役立ついくつかのツールを提供しています。

まず、ファイルをロードするには、SQL*Loader を使用してデータを XMLType としてロードするか、または DBMS_XSLPROCESSOR.READ2CLOB などを使用してファイルを CLOB として読み取り、それを XMLType に変換します。

XMLTypeとしてロードされた後、XPathを使用するPL/SQLプロシージャを使用して値を反復処理し、表に挿入できます。

そして、おそらくそれを行う他の方法がいくつかあります。

これらのアイデアのどれも、あなたが望んでいたほど簡単なものではないと確信しています。XML を正しく処理することは、SQL*Loader を通常使用する目的 (区切りファイルのロード) よりもはるかに複雑です。

于 2010-12-06T04:09:22.853 に答える