使用SQL Loader解决“无效数字”错误

时间:2019-04-15 16:58:57

标签: oracle sql-loader

我正在尝试使用下面的.fmt文件将以下数据加载到表中。

600-0093889-000R06169024159082020190220000000067.36   

600-0134686-000R06169024159082620190214000000123.33  

600-0134686-000R06169024159069520190214000000123.33- 

600-0093889-000R06169024159082620190220000000067.36- 

600-0122474-000R06169024159069520190227000001000.00- 

500-0433040-000R06168993159082620190227000000250.00- 

550-0046451-000R06168984159069520190227000000200.00- 

600-0124821-000R06169024159069520190227000000925.00- 

600-0107803-000R06165180159082620190227000000372.12- 

我的.fmt文件如下:

LOAD DATA 
APPEND INTO TABLE USB.INFOLEASE_CHG_OFF_0228
(
ID_NUMBER                  POSITION (  1 : 15) CHAR,
IDENTITY_CODE              POSITION ( 16 : 25) CHAR,
ID_RECORD_NBR              POSITION ( 26 : 27) CHAR,
DLY_AS_OF_DATE             POSITION ( 28 : 35) DATE 'YYYYMMDD',
AS_OF_DATE                 POSITION ( 36 : 43) DATE 'YYYYMMDD',
GL_ACCOUNT_ID          POSITION ( 68 : 74) DATE 'YYYYMMDD',
ORG_UNIT_ID            POSITION ( 64 : 67) CHAR,
ILC_CONTRACT_NUMBER        POSITION ( 44 : 58) CHAR,
ILC_CHGOFF_RCVY_IND        POSITION ( 59 : 59) CHAR,
ILC_BANK                   POSITION ( 60 : 63) CHAR,
ILC_OFFICE                 POSITION ( 64 : 67) CHAR,
ILC_ACCOUNT                POSITION ( 68 : 74) CHAR,
ILC_POSTING_DATE           POSITION ( 75 : 82) DATE 'YYYYMMDD',
ILC_AMOUNT                 POSITION ( 83 : 95) CHAR
)

这是表模式:

ColumnName  ColID   PK  IndexPos    Null    DataType
IDENTITY_CODE   1           Y   NUMBER (10)
ID_NUMBER   2           Y   VARCHAR2 (30 Byte)
ID_RECORD_NBR   3           Y   NUMBER (2)
GL_ACCOUNT_ID   4           Y   NUMBER (14)
ORG_UNIT_ID 5           Y   NUMBER (14)
AS_OF_DATE  6           Y   DATE
DLY_AS_OF_DATE  7           Y   DATE
ILC_CONTRACT_NUMBER 8           Y   CHAR (15 Byte)
ILC_CHGOFF_RCVY_IND 9           Y   CHAR (1 Byte)
ILC_BANK    10          Y   CHAR (4 Byte)
ILC_OFFICE  11          Y   CHAR (4 Byte)
ILC_ACCOUNT 12          Y   CHAR (7 Byte)
ILC_POSTING_DATE    13          Y   DATE
ILC_AMOUNT  14          Y   NUMBER (13

当我尝试加载数据时,出现以下错误:

  

记录35:已舍弃-所有列均为空。记录1:已拒绝-错误发生   表USB.INFOLEASE_CHG_OFF_0228,列IDENTITY_CODE。 ORA-01722:   无效的号码

     

记录2:已拒绝-表USB.INFOLEASE_CHG_OFF_0228的错误,列   IDENTITY_CODE。 ORA-01722:号码无效

     

记录3:已拒绝-表USB.INFOLEASE_CHG_OFF_0228的错误,列   IDENTITY_CODE。 ORA-01722:号码无效

     

记录4:拒绝-表USB.INFOLEASE_CHG_OFF_0228上的错误   IDENTITY_CODE。 ORA-01722:号码无效

     

记录5:拒绝-表USB.INFOLEASE_CHG_OFF_0228上的错误   IDENTITY_CODE。 ORA-01722:号码无效

     

记录6:拒绝-表USB.INFOLEASE_CHG_OFF_0228上的错误   IDENTITY_CODE。 ORA-01722:号码无效

     

记录7:拒绝-表USB.INFOLEASE_CHG_OFF_0228上的错误   IDENTITY_CODE。 ORA-01722:号码无效

     

记录8:拒绝-表USB.INFOLEASE_CHG_OFF_0228上的错误   IDENTITY_CODE。 ORA-01722:号码无效

     

记录9:拒绝-表USB.INFOLEASE_CHG_OFF_0228上的错误   IDENTITY_CODE。 ORA-01722:号码无效

     

记录10:已拒绝-表USB.INFOLEASE_CHG_OFF_0228出错,   列IDENTITY_CODE。 ORA-01722:号码无效

     

记录11:已拒绝-表USB.INFOLEASE_CHG_OFF_0228出错,   列IDENTITY_CODE。 ORA-01722:号码无效

     

记录12:已拒绝-表USB.INFOLEASE_CHG_OFF_0228出错,   列IDENTITY_CODE。 ORA-01722:号码无效

1 个答案:

答案 0 :(得分:3)

因为在位置16 ..您有字母“ R”,它不是NUMBER类型的有效字符:

您的数据:

data: 600-0093889-000R06169024159082020190220000000067.36   
pos : 12345678901234567890
                     ^
                    position 16 has the letter R

您的SQL Loader定义..显示:

IDENTITY_CODE              POSITION ( 16 : 25) CHAR,

位置16属于IDENTITY_CODE

和您的表定义:

IDENTITY_CODE   1           Y   NUMBER (10)

是NUMBER ..会导致您遇到错误。

我不确定如何建议解决此问题,也不完全确定您在做什么,或者最终目的..所以我不知道数据是否正确/不正确,或者表是否正确定义正确/不正确,等等。

相关问题