Oracle导出数据为excel或文本文件
将oracle中表的数据导出为excel文件保存,在网上看了很多方法,总的来说有两种。
一是运用excel工具中通过ODBC连接oracle数据库,将文本导出。
一是通过oracle的命令导出。基本上想运用各种第三方工具之类的。如:PL/sql developer 先查询再将结果存为excel或者Copy进excel中。
先来说说第一个方法,此方法可行但是有条件限制。如果导出的数据超过65535条就不行。而且这也是excel能打开的最大上限,超过这个数excel也不会装载成功。
方法是
在excel中“数据”--“导入数据”,可以选择新建一个数据源配置好数据连接的参数。也可以选择数据库查询。这个需要先在数据源中建好ODBC的数据源Driver。连接上后,选择需要导出的表,查询,将结果导入excel中即可。数据量小是此方法非常方便。
第二个方法也是需要先查询出来再保存。如果数据库的缓存设置过小的话,返回的数据量会小,数据量大的话此方法也行不通。
后来在网上看到一个小工具,别人开发的。对7,80多万的数据导出成文本也只要十几秒。
非常好。
下面是使用的命令:
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
用","来作为字段间的分隔符, 用换行作为记录的分隔符:
E:\tools\developtool\ociuldr>ociuldr user=test/test@mydb query="select * from BXLMCHAIN_RAW_N" field=, record=0x0a file=BXLMCHAIN_RAW.txt
大家可以试一试看。速度和质量确实很好。 1 楼 davidx 2010-01-14 正好碰到这个问题:
导出2.5万条数据,简单比较了下
一是运用excel工具中通过ODBC连接oracle数据库,将文本导出。
用时:配置数据源+导数,花费不到2分钟
二是通过oracle的命令导出。基本上想运用各种第三方工具之类的。如:PL/sql developer 先查询再将结果存为excel或者Copy进excel中。
用时:20分钟左右
(机器是T41简单配置,1G内存)
加句话,谢谢。 2 楼 davidx 2010-01-14 提供的小工具没摸懂用法,自己设置了个命令,在DOS模式下未调用成功。难道要设置环境变量?
不懂,有空补个详细说明吧。 3 楼 sunrise_king 2010-02-05 使用方法就是运行 cmd,切换到命令行,然后切换到此工具的目录,就可用命令了。 4 楼 shgavin 2010-03-03 用这个小工具确实很方便。用起来也比较简单。就是不知道可不可以设置它的编码格式吗? 5 楼 kandari 2012-02-07 嗯,不错!好文章! 6 楼 long3ok 2012-03-30 导出的数据能不能一条记录就占一行啊?