使用SQL Loader在表中加载数据

时间:2016-05-30 11:40:04

标签: oracle sql-loader

我正在通过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)**
)

2 个答案:

答案 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**
    )
  • '由空格终止' - 我经历了SQL Loader的一些线程,我使用了空格'在他的ctl文件的最后一列。它工作,这次我甚至不必使用' INTEGER'或者' EXTERNAL'或表达' ..'转换。 只有一件事,你们现在可以告诉我什么可能会产生问题?我的csv文件中有什么内容以及添加此内容如何解决了这个问题? 感谢。