在Oracle中你找不到来完成这个功能的工具. 我以前曾经用PowerBuilder的数据管道来完成这个任务, 后来在AskTom上看到有两个工具, 其中一个是用SQL*Plus的SPOOL命令来做的, 另一个是用Pro*C程序来写的. 用SQL*Plus的那种方法要比Pro*C的慢一些, 但是Pro*C因为和Oracle的版本结合太紧密, 不同的客户端版本需要重新编译, 因此在有不同版本的Oracle的环境下使用时不太方便. 几个月前, 我正在学习使用Oracle客户端的C程序接口(OCI)来编写数据库交互程序, 就用写一个这样的工具来作为练习题, 最后完成了任务, 并且在Linux/Unix下的不同的Oracle客户端版本下也不需要重新编译程序(在8i/9i/10g)的客户端下试过了.
这个工具可以免费下载, 在下载的文件中包括了Windows, Linux, Solaris下的可执行文件. 来看一下这个工具的命令行选项:
Usage: ociuldr user=... query=... field=... record=... file=...
(@) Copyright Lou Fangxin 2004/2005, all rights reserved.
Notes:
-si = enable logon as SYSDBA
user = username/password@tnsname
sql = SQL file name, one sql per file, do not include ";"
query = select statement
field = seperator string between fields
record= seperator string between records
file = output file name(default: uldrdata.txt)
read = set DB_FILE_MULTIBLOCK_READ_COUNT at session level
sort = set SORT_AREA_SIZE & SORT_AREA_RETAINED_SIZE at session level (UNIT:MB)
hash = set HASH_AREA_SIZE at session level (UNIT:MB)
serial= set _serial_direct_read to TRUE at session level
trace = set event 10046 to given level at session level
for field and record, you can use '0x' to specify hex character code,
/r=0x0d /n=0x0a |=0x7c ,=0x2c /t=0x09
其中read/sort/hash三个命令行选项是用来优化用的. 下面的例子用"#"来作为字段间的分隔符, 用换行作为记录的分隔符:
C:/ociuldr user=anysql/anysql@prod query="select * from tab" field=# record=0x0a file=anysql_tab.txt
3100 bytes allocated for column TNAME (1)
800 bytes allocated for column TABTYPE (2)
4100 bytes allocated for column CLUSTERID (3)
0 rows exported at 2006-08-03 10:54:38
12 rows exported at 2006-08-03 10:54:38
C:/>type anysql_tab.txt
AULEXT#TABLE#
A_SEQ_SYN#SYNONYM#
A_V#VIEW#
OBJD_LIST#TABLE#
T#TABLE#
TRANSACTION_CACHE_IOT_0#TABLE#
T_HASH#TABLE#
T_LOB#TABLE#
T_LONG#TABLE#
T_LONGRAW#TABLE#
T_TRUNC2#TABLE#
T_TRUNC4#TABLE#
这个工具用100大小的数组来从服务器端取得记录, 从儿保证了这个工具的良好性能. 现在的版本中还没有自动生成用SQL Loader来装载数据用的控制文件, 下一次更新将包括这个功能, 在Linux/Unix下使用时需要设置三个环境变量:
ORACLE_HOME
NLS_LANG
LD_LIBRARY_PATH, 需要指向32位的客户端库
利用SQL*Loader将 Excel 数据导出到 Oracle 数据库中
转自 http://www.jiejingwang.com 2002-10-24 捷径网
=========================================
系统环境:
1、操作系统:Windows 2000 Server,机器内存128M
2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版
3、安装路径:C:/ORACLE
实现步骤:
1、打开MicroSoft Excel 2000
2、文件(F)→新建(N)→工作簿→
3、输入以下数据,存盘为test.xls,如图:
http://www.jiejingwang.com/images/10241.jpg
4、文件(F)→另存为(A)→
保存类型为:制表符分隔,起名为text.txt,保存到C:/
http://www.jiejingwang.com/images/10242.jpg
5、连入SQL*Plus
以system/manager用户登录,
SQL> conn system/manager
创建表结构
SQL> create table test
(
id number, --序号
username varchar2(10), --用户名
password varchar2(10), --密码
sj varchar2(20) --建立日期
);
6、创建SQL*Loader输入数据所需要的文件,均保存到C:/,用记事本编辑:
控制文件:input.ctl,内容如下:
load data --1、控制文件标识
infile 'test.txt' --2、要输入的数据文件名为test.txt
append into table test --3、向表test中追加记录
fields terminated by X'09' --4、字段终止于X'09',是一个制表符(TAB)
(id,username,password,sj) -----定义列对应顺序
a、insert,为缺省方式,在数据装载开始时要求表为空
b、append,在表中追加新记录
c、replace,删除旧记录,替换成新装载的记录
d、truncate,同上
7、在DOS窗口下使用SQL*Loader命令实现数据的输入
C:/>sqlldr userid=system/manager control=input.ctl
http://www.jiejingwang.com/images/10243.jpg
默认日志文件名为:input.log
默认坏记录文件为:input.bad
8、连接到SQL*Plus中,查看是否成功输入