我正在通过SQL Loader将数据加载到我的表中 数据加载是成功的,但我在所有行的特定列中得到垃圾(重复)值
插入后: 列 TERM_AGREEMENT 为每条记录获取值'806158336' 我的csv文件包含该列的最多3位数据,但我被迫将列定义设置为Number(10)。
LOAD DATA
infile '/ipoapplication/utl_file/LBR_HE_Mar16.csv'
REPLACE
INTO TABLE LOAN_BALANCE_MASTER_INT
fields terminated by ',' optionally enclosed by '"'
(
ACCOUNT_NO,
CUSTOMER_NAME,
LIMIT,
REGION,
**TERM_AGREEMENT INTEGER**
)
create table LOAN_BALANCE_MASTER_INT
(
ACCOUNT_NO NUMBER(30),
CUSTOMER_NAME VARCHAR2(70),
LIMIT NUMBER(30),
PRODUCT_DESC VARCHAR2(30),
SUBPRODUCT_CODE NUMBER,
ARREARS_INT NUMBER(20,2),
IRREGULARITY NUMBER(20,2),
PRINCIPLE_IRREGULARITY NUMBER(20,2),
**TERM_AGREEMENT NUMBER(10)**
)
答案 0 :(得分:1)
INTEGER用于二进制数据类型。如果您要导入csv文件,我认为这些数字存储为纯文本,因此您应该使用INTEGER EXTERNAL。 EXTERNAL子句指定表示数字的字符数据。
编辑: 问题似乎是文件的终止字符。您应该能够通过以下方式编辑INFILE行来解决此问题:
INFILE'/ipoapplication/utl_file/LBR_HE_Mar16.csv' "STR X'5E204D'"
其中'5E204D'是'^ M'的十六进制。要获取十六进制值,可以使用以下查询:
SELECT utl_raw.cast_to_raw ('^ M') AS hexadecimal FROM dual;
希望这有帮助。
答案 1 :(得分:1)
我实际上是自己解决了这个问题。 首先,感谢@Gary_W和@Alessandro的投入。真的很感谢你们的帮助,在这个过程中学到了一些新东西。 这是新片段的工作,我得到了最后一栏的正确数据
LOAD DATA
infile '/ipoapplication/utl_file/LBR_HE_Mar16.csv'
REPLACE
INTO TABLE LOAN_BALANCE_MASTER_INT
fields terminated by ',' optionally enclosed by '"'
(
ACCOUNT_NO,
CUSTOMER_NAME,
LIMIT,
REGION,
**TERM_AGREEMENT INTEGER Terminated by Whitspace**
)