oracle load导入TXT文件总结

本文介绍如何使用Oracle数据库的加载工具解决大批量数据导入的问题。针对数据文件格式与表结构不匹配的情况,通过调整控制文件设置及字段长度,成功实现数据的高效准确导入。


                在项目中有一批数据要定时导入到数据库中,文本文件的内容如下,

 

20101020061010|808080123100001|1488015462605121|0001|000000001000|1001|20101020|4007|156|20101020|745147|20101020060855|13776413305|A73E0784555C454927D809A3776952114EFCACA0276C6F8B79FDF55558D316021867784F5E08A8143D6B91ACDFD23AC3975A52C52EFB5CA5FD4744227AA4999513324B043D4521F134A787EBD8C67E5023EC63A7CD2C1920A4E04733C4470F2DE757EE9DEE7F34BAA414901BFBB4419E79787CFFD3254B00A9E6985471C0D3ED
20101020064016|808080123100001|1488015462897029|0001|000000001000|1001|20101020|4007|156|20101020|745412|20101020063917|13776413305|8C28C569D19DF848216A8FE00EE5E029F3EC13E5018BDBD0F1CA1C1B80975EE1318E07851516583A894F4D07CF8696FF7E1098ADBBC85E8083E2C99361D476693986F4031A3C9FC9010CF0A34C2CD15551A46D1409DCE365B4FAAFD24DA6073C842865F3B4BBA8DA4F2A0C106F7B618DC9CC5117CAE69099801B226535363C6A

这些数据以“|”分隔开,一个文件差不多有6千条数据。。

决定用oracle 的 Load搞定他。。

首先建一个.ctl 控制文件

然后在文件里面输入

OPTIONS (skip=1)
load data 
INFILE  'E:\808080123100001_20101020_20101021042834.txt'
append into  table account_of_check
FIELDS TERMINATED BY '|'
trailing nullcols 
(
Chinapaydate,
MerId,
Ordid,
TransType,
Transamt,
Transstat,
Transdate,
GateId,
Curid,
cpDate,
Cpseqid,
longname1,
telno,
checkValue char(256),
FILLER_1 FILLER,
accountchid   "SEQ_account_of_check.nextVal"
)

由于我的表中是比文本文档上多了一个主键列(accountchid )我要主键自动增长,所以让sequence给他值,FILLER_1 FILLER这个后面的列不需要从文本上导入的

但要放到最后。。

当导入时始张报

表 ACCOUNT_OF_CHECK 的列 CHECKVALUE 出现错误。
数据文件的字段超出最大长度

这个错,搞得很纠结,因为我最后一列就是256个字符,我把字段设成了2000还是报这个错。。

后来经过大神们提醒 加了一个 char(256)

哈哈搞定了。。

最后在doc下输入


 

sqlldr xwmall/xwmall@10.32.65.42/oradb control =E:\Noname1.ctl log=Noname1.log;


记住要生成这个日志文件,方便你调试

 

 

导入TXT文件Oracle数据库可以通过多种方法实现,具体取决于文件的内容格式和目标表的结构。以下是几种常见的方法: ### 1. 使用SQL*Loader SQL*Loader是Oracle提供的一个强大的工具,专门用于将外部数据文件(如TXT文件)加载到数据库表中。以下是基本的使用步骤: - **准备控制文件**:控制文件(.ctl)定义了数据文件的格式和目标表的结构。 ```sql LOAD DATA INFILE 'data.txt' INTO TABLE employees FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (id, name, department) ``` - **执行SQL*Loader命令**: ```bash sqlldr userid=username/password@database control=control_file.ctl ``` 这将根据控制文件中的定义将数据从`data.txt`加载到目标表`employees`中[^1]。 ### 2. 使用PL/SQL脚本 如果数据文件较小,可以使用PL/SQL脚本直接读取文件内容并插入到目标表中。以下是一个简单的示例: ```sql DECLARE file_handle UTL_FILE.FILE_TYPE; line_text VARCHAR2(32767); BEGIN -- 打开文件 file_handle := UTL_FILE.FOPEN('DIRECTORY_NAME', 'filename.txt', 'R'); -- 逐行读取文件 LOOP UTL_FILE.GET_LINE(file_handle, line_text); EXIT WHEN line_text IS NULL; -- 假设目标表为temp_table,并将每行数据插入到表中 INSERT INTO temp_table (column1) VALUES (line_text); END LOOP; -- 关闭文件 UTL_FILE.FCLOSE(file_handle); COMMIT; EXCEPTION WHEN OTHERS THEN UTL_FILE.FCLOSE(file_handle); RAISE; END; ``` 在使用此方法之前,需要确保已创建了指向文件所在目录的Oracle目录对象(DIRECTORY)。 ### 3. 使用外部表(External Table) 外部表允许直接查询外部文件,而无需将数据实际加载到数据库中。以下是创建外部表的步骤: - **创建目录对象**: ```sql CREATE OR REPLACE DIRECTORY ext_data_dir AS '/path/to/data'; ``` - **创建外部表**: ```sql CREATE TABLE ext_employees ( id NUMBER, name VARCHAR2(100), department VARCHAR2(100) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_data_dir ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (id, name, department) ) LOCATION ('data.txt') ); ``` 创建完成后,可以通过查询`ext_employees`表来访问TXT文件中的数据[^1]。 ### 4. 使用SQL Developer 如果使用Oracle SQL Developer,可以直接通过图形界面导入数据: - 打开SQL Developer,连接到目标数据库。 - 右键点击目标表,选择“导入数据”选项。 - 按照向导选择TXT文件,并映射文件中的列到目标表的字段。 - 完成导入过程。 ### 5. 使用数据泵(Data Pump) 如果需要定期导入大量数据,可以使用Oracle Data Pump。虽然Data Pump主要用于导入导出数据库对象,但也可以结合脚本处理TXT文件[^2]。 --- ### 注意事项 - **文件路径权限**:确保Oracle用户对TXT文件所在的目录具有读取权限。 - **数据格式匹配**:导入前应确保TXT文件的格式与目标表的结构匹配,避免数据类型不一致的问题。 - **性能优化**:对于大数据量的导入任务,建议使用SQL*Loader或外部表,以提高效率。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值