把Oracle中的数据导到文本文件

时间:2023-02-11 09:17:00

 在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中,查看是否成功输入