使用 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 文件中那个列中有什么,以及如何通过添加这个东西解决问题?
谢谢。
我正在通过 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 文件中那个列中有什么,以及如何通过添加这个东西解决问题? 谢谢。