在ORACLE中TAB表中结构:
A INT ,
B nvarchar2(50)
我在D:\DATA.TXT中有大量数据,格式与TAB表相同,现我想将TXT文件导入到TAB表中,
实现这种批处理的方法,我在SQL2000中用:
BULK INSERT 事件记录表 FROM 'D:\DATA.TXT‘
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
而在ORACLE中使用这种方法却已不行了,请问ORACLE用什么方法来处理批量数据的插入。
A INT ,
B nvarchar2(50)
我在D:\DATA.TXT中有大量数据,格式与TAB表相同,现我想将TXT文件导入到TAB表中,
实现这种批处理的方法,我在SQL2000中用:
BULK INSERT 事件记录表 FROM 'D:\DATA.TXT‘
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
而在ORACLE中使用这种方法却已不行了,请问ORACLE用什么方法来处理批量数据的插入。
使用这种方法导入excel内容到oracle时,首先需要将excel文件另存为文本格式,文件类型选文本类型或者csv类型即将e:\test.xls另存为e:\test.csv。
如果oracle没有对应存储数据的表结构,则需要创建表test(id,name,telphone)。
用记事本创建sql*loader控制文件test.ctl(ctl后缀是企图证明这是一个控制文件,但实际上这个文件后缀不重要,用户可以自由选择,但文件格式一定要是文本格式),内容如下:
Load data
Infile ‘e:\test.csv’ --数据源文件名称
Append|insert|replace --append在表后追加,insert插入空表,replace替代原有内容
Into table test --要导入的数据库表名称
[when id = id_memo] --过滤条件
Fields terminated by X’09’ --字段分隔符
(id,name,telphone) --字段名称列表
最后在命令窗口输入sqlldr命令行执行导入操作Sqlldr userid = system/manager control=’e:\test.ctl’
Sqlldr的函数关键字说明:
Userid --oracle用户名 userid = username/password
Control --控制文件名称 control = ‘e:\insert.ctl’
Log –-日志文件名称 log = ‘e:\insert.log’
Bad --损坏文件名称
Data --data file name
Discard --discard file name
Discardmax --number of discards to allow(默认全部)
Skip --导入时跳过的记录行数(默认0)
Load --导入时导入的记录行数(默认全部)
Errors --允许错误的记录行数(默认50)
1. 用Toad 直接导入execl等类型的数据2. 用sqlloader 工具导入数据.. SQL LOADER 实例 创建表:test_load,
sql>create table test_load(id number(10),uname varchar2(20), phone varchar2(20));
控制文件:d:\loader.ctl
load data
infile 'd:\datafile.txt'
append into table test_load
fields terminated by "," optionally enclosed by '"'
( id, uname, phone ) 数据文件:D:\datafile.txt
001,"david",0551-1234567
002,"dave",0551-7654311
sqlloader命令:
SQL>sqlldr 'sys/admin AS SYSDBA' control=D:\loader.ctl log=d:\a.log
SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 7月 2 09:40:42 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
达到提交点 - 逻辑记录计数 1
达到提交点 - 逻辑记录计数 2
SQL> select * from test2;
EMPNO ENAME SAL DEPTNO
---------- ---------- ---------- ----------
10002 Frank 500 20
10001 Scott 1000 40
Oracle SQL Loader
http://blog.csdn.net/tianlesoftware/archive/2009/10/16/4674063.aspx
------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
Q Q 群:62697716
首先要写个CTL文件,
result.ctl内容:
load data
infile 'D:\DATA.TXT'
into table TAB
(col1 char terminated by ',',
col2 char terminated by ',',
col3 char terminated by ',',
col4 char terminated by whitespace)
说明:
infile 指数据源文件 这里我们省略了默认的
into table tab 默认是INSERT,也可以into table tab APPEND为追加方式,或REPLACE
terminated by ',' 指用逗号分隔
terminated by whitespace 结尾以空白分隔
col1...col4是填表中具体的列名,如id,name,age...有多少列,自己加上。
最后在装了数据库的机器上的命令提示符窗口执行(如WINDOWS的DOS窗口):
sqlldr userid=fancy/testpass control=result.ctl log=resulthis.out
说明:userid=fancy/testpass 是登陆数据库的用户名/密码 ,control=result.ctl 就是刚才上面写的CTL文件,写绝对路径不会有问题。log这一项是日志,就这样就行。
当加载大量数据时(大约超过10GB),最好抑制日志的产生:
SQL>ALTER TABLE RESULTXT nologging;
2.在数据库中建立好需要导入的数据表结构
3.手动保存input.ctl文件
load data
infile 'test.txt'
append into table system.lin--追加记录
filelds teminated by X'09'
4.sqlldr userid=system/manager@sid control=input.ctl
create or replace directory DATA_PATH as 'D:\';create table tab_exp
(
a number,
b varchar2(20)
)
organization external
(
type oracle_loader
default directory DATA_PATH
access parameters
(
records delimited by newline
badfile 'D:\data_badfile.txt'
logfile 'D:\data_logfile.txt'
fields terminated by ','
missing field values are null
(a, b)
)
location('DATA.TXT')
);select * from tab_exp;
首先要写个CTL文件,
result.ctl内容:
load data
infile 'D:\DATA.TXT'
into table TAB
(col1 char terminated by ',',
col2 char terminated by ',',
col3 char terminated by ',',
col4 char terminated by whitespace)
说明:
infile 指数据源文件 这里我们省略了默认的
into table tab 默认是INSERT,也可以into table tab APPEND为追加方式,或REPLACE
terminated by ',' 指用逗号分隔
terminated by whitespace 结尾以空白分隔
col1...col4是填表中具体的列名,如id,name,age...有多少列,自己加上。
最后在装了数据库的机器上的命令提示符窗口执行(如WINDOWS的DOS窗口):
sqlldr userid=fancy/testpass control=result.ctl log=resulthis.out
说明:userid=fancy/testpass 是登陆数据库的用户名/密码 ,control=result.ctl 就是刚才上面写的CTL文件,写绝对路径不会有问题。log这一项是日志,就这样就行。
当加载大量数据时(大约超过10GB),最好抑制日志的产生:
SQL>ALTER TABLE RESULTXT nologging;