2016-08-24 4 views
0

Oracle 테이블의 clob 필드에로드하려고하는 .xml 파일이 있습니다. .xml 파일의 길이는 49 줄입니다. 내 sqlloader cntl을 실행하면 전체 .xml 파일이 내 테이블에 새로운 행 49 번로드됩니다. Oracle 11.2.0.3을 사용하고 있습니다. 내가 뭘 잘못하고 있니?오라클 테이블에 clob을로드하려고 할 때 너무 많은 레코드를로드하려고합니다.

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

내 CNTL : LOB에 오라클 로더의 일반적인 설정이 될 것

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

:

  • 공급 지침과 제어 파일이
  • 와 주요 데이터 파일이 메타 데이터 (작성자, 날짜, 파일 이름). 파일의 각 행은 목표 테이블의 행이됩니다.
  • 목표 파일의 CLOB 또는 BLOB 컬럼으로로드되는 기본 파일의 각 항목에 대해 별도의 파일이 있습니다. 귀하의 경우에는

은 XML 파일은 주 데이터 파일과 별도의 LOB 파일 모두로 사용되는 것 (I 완전히 이유를 이해하지 않습니다하지만,? 당신은 또한 명령 줄에서 XML을 지정하는) .

그래서이 세 가지를 올바르게 지정해야합니다. 당신의 도움이, 코도에 대한

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

감사합니다 : 세 개의 파일을 방지하기 위해, 당신은 (이 INFILE 후 astrisk가 무엇인지 임) BEGINDATA 지시어를 사용하여 제어 파일에 주 데이터 파일을 넣어. 이것은 나에게 너무 새로운 것이고 나는 그것을 정말로 이해하고 싶다. 하나의 입력 .xml 파일 만 있습니다. 그와 함께 갈 파일이 더 있어야한다고 생각하니? 그것은 내가 필요로하는 것처럼 들리지 않는다. 내 명령 줄에 .xml 파일 이름이 'data ='로 포함되어 있습니다. 두 곳에서 그 이름을 사용하는 것을 피할 수있는 방법이 있습니까? 내가 제공 한 cntl 파일을 시도했지만 오류가 발생했습니다. Expected keyword INTO, found "(". ( )^ – Marianne

+0

커맨드 라인에서 지정하면, XML 파일은로드 할 LOB 파일뿐만 아니라 메인 데이터 파일로도 사용됩니다. 명령 줄에서 지정하지 마십시오. INFILE 절과 충돌합니다. 오류에 대해서는 조사해 보겠습니다. – Codo

+0

제어 파일 명령이 업데이트되었으므로 잘 작동합니다. – Codo