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

问题描述 投票:0回答:1

我正在尝试使用下面的.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:无效的号码

oracle sql-loader
1个回答
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 ..这导致您遇到的错误。

我不确定如何推荐修复它,我不完全确定你在做什么,或者最终目的..所以我不知道数据是否正确/不正确,或者表定义是否正确/不正确等

© www.soinside.com 2019 - 2024. All rights reserved.