2

I have an external table with the below definition.

create table app_doctor (
      doc_no             number(9),
      age                number(3),
      eor                char(3 char)
) 
organization external 
(     type oracle_loader
      default directory "DOC"
      access parameters
      ( 
        records delimited by newline
        **load when (eor = "EOR")**
        string sizes are in characters
        logfile 'doc.log'
        badfile 'doc.bad'
        discardfile 'doc.dsc'
        fields 
        ( 
          doc_no position     (1:9) integer external(9),
          age position        (10:12) integer external(3),
          eor position        (13:15) char(3)
        )
      )
      location('HOSP_DOC.txt')
)
reject limit unlimited
parallel 5;

I feed 100 records, of which 50 are valid, 20 are invalid, and 30 do not satisfy the WHEN condition, but I see only 4 or 5 records in my discard file.

4

3 回答 3

0

使用以下外部表定义:

create table app_doctor (
      doc_no             number(9),
      age                number(3),
      eor                char(3 char)
) 
organization external 
(     type oracle_loader
      default directory "DOC"
      access parameters
      ( 
        records delimited by newline
        **load when (eor = "EOR")**
        string sizes are in characters
        logfile 'doc.log'
        badfile 'doc.bad'
        discardfile 'doc.dsc'
        fields 
        ( 
          doc_no position     (1:9) integer external(9),
          age position        (10:12) integer external(3),
          eor position        (13:15) char(3)
        )
      )
      location('HOSP_DOC.txt')
)
reject limit unlimited
parallel 5;

以及以下测试数据文件:

123456789021EOR
123456789021EOR
123456789021EOR
123456789021EOR
123456789021FER
123456789021FER
123456789021FER
asdfasfa9021ABC
asdfasfa9021ABC
asdfasfa9021ABCasdfasdas
123456789021ABC
123456789021FER
123456789021EOR
123456789021EOR
123456789021EOR
123456789021ABC
123456789021ABC
123456789021ABC

运行时返回 7 条有效记录

select * from app_doctor;

我的丢弃文件包含所有 11 条不良记录,日志文件doc.log包含有关执行期间发生的事情的正确信息:

  LOG 文件于 2013 年 3 月 8 日 11:33:56 打开

表 APP_DOCTOR 的字段定义
  记录格式 DELIMITED BY NEWLINE
  文件中的数据与平台具有相同的字节顺序
  接受所有空字段的行
  加载时间 (EOR = EOR)

  数据源中的字段:

    DOC_NO 外部整数 (9)
      记录位置 (1, 9)
      修剪空白与 SQL Loader 相同
    AGE 外部整数 (3)
      记录位置 (10, 12)
      修剪空白与 SQL Loader 相同
    EOR 字符 (3)
      记录位置 (13, 15)
      修剪空白与 SQL Loader 相同


 LOG 文件于 2013 年 3 月 8 日 11:33:56 打开

表 APP_DOCTOR 的字段定义
  记录格式 DELIMITED BY NEWLINE
  文件中的数据与平台具有相同的字节顺序
  接受所有空字段的行
  加载时间 (EOR = EOR)

  数据源中的字段:

    DOC_NO 外部整数 (9)
      记录位置 (1, 9)
      修剪空白与 SQL Loader 相同
    AGE 外部整数 (3)
      记录位置 (10, 12)
      修剪空白与 SQL Loader 相同
    EOR 字符 (3)
      记录位置 (13, 15)
      修剪空白与 SQL Loader 相同
KUP-04102:从文件 /apps/oracle/doc/HOSP_DOC.txt 中丢弃的记录 5
KUP-04102:从文件 /apps/oracle/doc/HOSP_DOC.txt 中丢弃的记录 6
KUP-04102:记录 7 从文件 /apps/oracle/doc/HOSP_DOC.txt 中丢弃
KUP-04102:记录 8 从文件 /apps/oracle/doc/HOSP_DOC.txt 中丢弃
KUP-04102:从文件 /apps/oracle/doc/HOSP_DOC.txt 中丢弃的记录 9
KUP-04102:从文件 /apps/oracle/doc/HOSP_DOC.txt 中丢弃的记录 10
KUP-04102:从文件 /apps/oracle/doc/HOSP_DOC.txt 中丢弃的记录 11
KUP-04102:从文件 /apps/oracle/doc/HOSP_DOC.txt 中丢弃的记录 12
KUP-04102:从文件 /apps/oracle/doc/HOSP_DOC.txt 中丢弃的记录 16
KUP-04102:从文件 /apps/oracle/doc/HOSP_DOC.txt 中丢弃的记录 17
KUP-04102:从文件 /apps/oracle/doc/HOSP_DOC.txt 中丢弃的记录 18
于 2013-03-08T17:35:31.043 回答
0

根据oracle 文档

DISCARDFILE 子句命名了将不符合 LOAD WHEN 子句中的条件的记录写入的文件。

于 2014-12-19T07:26:02.063 回答
-1

您可以在 eor='EOR' 的负载中删除它应该工作的星号和括号

于 2020-10-16T19:28:12.250 回答