2016-08-24 3 views
0

Oracleテーブルのclobフィールドにロードしようとしている.xmlファイルがあります。 .xmlファイルの長さは49行です。私のsqlloader cntlを実行すると、.xmlファイル全体がテーブルに新しい行として49回ロードされます。私はOracle 11.2.0.3を使用しています。何が間違っていますか?Oracleテーブルにclobをロードしようとすると、あまりにも多くのレコードがロードされる

私CNTL
CREATE TABLE "LEAD_REPORTING_CLOB" 
("SHARED_XML" CLOB); 

LOAD DATA 
INFILE * 
REPLACE 

INTO TABLE LEAD_REPORTING_CLOB 
TRAILING NULLCOLS 
(
SHARED_XML  LOBFILE(CONSTANT '/export/RFD/Lead_Reports/LEADRPT.xml') TERMINATED BY EOF 
) 


xml file: 

<?xml version="1.0" encoding="utf-8"?> 
<LeadReport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.xxx.yyy/efile"> 
    <Lead> 
    <SubmissionId>530153999999zdhxxx</SubmissionId> 
    <PatternDescription>OLF</PatternDescription> 
    <SourceIPAddress> 
     <IPAddress> 
     <IPv4AddressTxt>999.99.99.999</IPv4AddressTxt> 
     </IPAddress> 
     <TCPPortNumber>443</TCPPortNumber> 
     <IPTs>2016-02-05T13:16:55-05:00</IPTs> 
    </SourceIPAddress> 
    <SourceDeviceId> 
     <DeviceId>74B3A80AE5C99X9X99999C17XX59E5XX3779999A</DeviceId> 
     <DeviceIdTs>2016-02-05T13:16:55-05:00</DeviceIdTs> 
    </SourceDeviceId> 
    <AdditionalInformation> 
     <ReturnSubmStatus>A</ReturnSubmStatus> 
    <EFIN>555555</EFIN> 
     <EmailAddressDomain>GMAIL.COM</EmailAddressDomain> 
     <PhoneNumberLastFour>1899</PhoneNumberLastFour> 
    </AdditionalInformation> 
    </Lead> 
    <Lead> 
    <SubmissionId>9999992016108floxxx2</SubmissionId> 
    <AssociatedState> 
     <StateSubmissionId>9999992016108xhaxxx2</StateSubmissionId> 
     <StateOrCityCode>GAST</StateOrCityCode> 
    </AssociatedState> 
    <PatternDescription>OLF</PatternDescription> 
    <SourceIPAddress> 
     <IPAddress> 
     <IPv4AddressTxt>188.88.8.188</IPv4AddressTxt> 
     </IPAddress> 
     <TCPPortNumber>443</TCPPortNumber> 
     <IPTs>2016-04-17T08:07:54-04:00</IPTs> 
    </SourceIPAddress> 
    <SourceDeviceId> 
     <DeviceId>6B9D4C4B0159XXX8FA30391BC8A099999009B366</DeviceId> 
     <DeviceIdTs>2016-04-17T08:07:54-04:00</DeviceIdTs> 
    </SourceDeviceId> 
    <AdditionalInformation> 
     <ReturnSubmStatus>A</ReturnSubmStatus> 
     <EFIN>444444</EFIN> 
     <EmailAddressDomain>YAHOO.COM</EmailAddressDomain> 
     <PhoneNumberLastFour>3822</PhoneNumberLastFour> 
    </AdditionalInformation> 
    </Lead> 
</LeadReport> 

答えて

0

LOBでのOracle Loaderのための典型的なセットアップは、次のようになります。

  • ロード命令
  • と制御ファイルの主なデータ・ファイルがありますメタデータ(著者、日付、ファイル名)。ファイル内の各行は、ターゲット表の行になります。
  • ターゲット・テーブルのCLOBまたはBLOBカラムにロードされる、メイン・ファイル内の各エントリごとに別個のファイルがあります。

あなたの場合、XMLファイルはメインデータファイルと別のLOBファイルの両方として使用されているようです(ただし、なぜ私は完全に理解できませんが、コマンドラインでXMLも指定していますか? 。

これら3つのものを適切に指定する必要があります。あなたの助け、Codoため

LOAD DATA 
INFILE * 
REPLACE 

INTO TABLE LEAD_REPORTING_CLOB 
FIELDS TERMINATED BY ',' TRAILING NULLCOLS 
(
    FILENAME, 
    SHARED_XML LOBFILE(FILENAME) TERMINATED BY EOF 
) 

BEGINDATA 
/export/RFD/Lead_Reports/LEADRPT.xml 
+0

ありがとう:3つのファイルを避けるために、あなたは(これはINFILE後astriskが何のためにあるのかである)BEGINDATAディレクティブを使用して、制御ファイルに、メイン・データ・ファイルを置きます。これは私には新しく、本当に理解したいです。私は1つの入力.xmlファイルを持っています。あなたはそれに追随するための追加ファイルが必要だと思っていますか?私はそれが必要なようには聞こえません。私のコマンドラインには、 'data ='という.xmlファイル名が含まれています。両方の場所で名前を持つことを避ける方法はありますか?あなたが提供したcntlファイルを試しましたが、エラーが発生しました。 Expected keyword INTO、found "("。 ( )^ – Marianne

+0

これはコマンドラインで指定すると、読み込むLOBファイルだけでなくメインデータファイルとしても使用されます。コマンドラインで指定してくださいINFILE句と矛盾しています。エラーについては調査します。 – Codo

+0

制御ファイルコマンドを更新しました。うまくいけばうまくいきます。 – Codo

関連する問題