使用 SQL Loader 在 table 中加载数据

loading data in table using SQL Loader

我正在通过 SQL 加载程序将数据加载到我的 table 数据加载成功,但我在所有行的特定列中获取垃圾(重复)值

插入后: 列 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)**
)

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;

希望对您有所帮助。

其实我自己解决了这个问题。 首先,感谢@Gary_W 和@Alessandro 的 inputs.Really 感谢你们的帮助,在此过程中学到了一些新东西。 这是有效的新片段,我得到了最后一列的正确数据

 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**
    )
  • 'Terminated by whitespace' - 我浏览了一些 SQL Loader 线程,并在他的 ctl 文件的最后一列中使用了 'terminated by whitespace'。它起作用了,这次我什至不必使用 'INTEGER' 或 'EXTERNAL' 或 EXPRESSION '..' 进行转换。 只有一件事,现在你们可以告诉我什么可能会造成问题吗?我的 csv 文件中那个列中有什么,以及如何通过添加这个东西解决问题? 谢谢。