分类: Oracle
2011-05-16 22:27:19
SQL*Loader简介
SQL*Loader从文本文件导数据到数据库中。功能包括:
从定界文件装数据
从固定长度的文本文件装数据
从二进制文件装数据
在输入文件中过滤数据
SQL*Loader使用的数据类型
Char:该char和数据库中的char类型不同,它包括数据库中的char、varchar、CLOB等类型
Date:时间类型
Interger external:定义整数值
Decimal external:定义包括小数点的数值
装载字段固定长度的文件
一个例子:
Load data
infile ‘yyb_data.txt’
append
Into table emp
( name position(1:10) char,
rank position(11:13) interger external,
birthday position(13:23) date “dd-mm-yyyy”
)
导入有界定符的文件
一个例子:
Load data
Infile ‘c:\yyb.txt’
append
Into table emp
( name char terminated by ‘,’,
rank interger external terminated by ‘,’,
birthday date “dd-mm-yyyy” terminated by ‘,’
)
导入有界定符的文件 (续)
再看一个例子(处理空字段):
Load data
Infile ‘c:\yyb.txt’
append
Into table emp
trailing nullcols
( name char terminated by ‘,’,
rank interger external terminated by ‘,’,
birthday date “dd-mm-yyyy” terminated by ‘,’ )
如何把数据放到表中
从前面的例子中可以看出,它们都包含关键字append,还有其它的关键字:
Insert:指定要装载的是空表,否则失败
Append:添加数据到表,即使表中有数据
Replace:加载前,将删除表中的所有数据
Truncate:与replace同
使用SQL*Loader命令和参数
命令语法为:
sqlldr [param=value [,param= valus … ] ]
参数:
Userid 用户名和密码
Control 指定控制文件名,也就是存放前面的胶片中的代码的文件
Log 指定日志文件名
Bad 指定存放坏记录的文件名
SQL*Loader参数(续前)
Data 指定数据文件名
Skip 允许跳过的记录数量
Load 允许装入的记录数量
Errors 指定允许的错误数
Rows 指定装载多少条记录提交一次
Direct 可以指定为直接路径装载
Parfile 指定包含命令参数的文件名
举个例子来说明:
(1)先创建一张表:
create table test_load(
stu_num number(10,0),
stu_name varchar2(50),
stu_date date
)
(2)准备数据文件(可以采用spool导出,再下来会讲到): dateFile.txt
"1234","niegc","2006-01-01"
"1235","ngc","2006-01-02"
(3)写控制文件(必须注意每一个字段的位置,和时间字段的格式):loader.ctl
Load data
infile 'F:\test\dateFile.txt'
Append into table test_load
fields Terminated by "," Optionally enclosed by'"'
(
stu_num,
stu_name,
stu_date date "YYYY-MM-DD"
)
(3)执行sqlldr
C:\Documents and Settings\Administrator>sqlldr niegc/niegc control=f:\test\loader.ctl log=f:\test\aaaaaa.log
SQL*Loader: Release 9.2.0.1.0 - Production on 星期三 4月 26 22:06:35 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
达到提交点,逻辑记录计数2
成功了,是不是很简单,append 还是insert 上面有说明的哦.
4.Spool简介
spool 是数据的导出命令,最简单的执行如下:
用sqlplus 登陆:
SQL>spool f:\test\bbb.txt
SQL> select * from test_load;
STU_NUM STU_NAME STU_DATE
---------- -------------------------------------------------- ----------
1234 niegc 01-1月 -06
1235 ngc 02-1月 -06
SQL> spool off
这样就可以导出了
如果你想导出自己定义的格式,你可以先set 参数然后再spool
例如:
SET COLSEP ' '
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET PAGESIZE 0
SET LINESIZE 1000
SET NUMWIDTH 12
SET TERMOUT OFF
SET TRIMOUT ON
SET TRIMSPOOL ON