尝试将clob加载到Oracle表时,加载太多记录

时间:2016-08-24 12:14:19

标签: xml oracle clob sql-loader

我有一个.xml文件,我试图加载到Oracle表中的clob字段。 .xml文件长度为49行。当我运行我的sqlloader cntl时,整个.xml文件作为新行加载到我的表中49次。我正在使用Oracle 11.2.0.3我做错了什么?

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

我的cntl:

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>

1 个答案:

答案 0 :(得分:0)

带有LOB的Oracle Loader的典型设置是:

  • 带有加载说明的控制文件
  • 主数据文件包含元数据(作者,日期,文件名)。文件中的每一行都成为目标表中的一行。
  • 主文件中的每个条目都有一个单独的文件,该文件被加载到目标表的CLOB或BLOB列中。

在您的情况下,XML文件似乎既用作主数据文件又用作单独的LOB文件(虽然我不完全理解为什么;您是否也在命令行上指定XML?)。

所以你需要正确指定这三件事。为了避免三个文件,您使用BEGINDATA指令将主数据文件放入控制文件中(这是INFILE之后的astrisk):

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