今天一个朋友问我怎么把200万的数据转的excel里,说老板要看,而且只要excel格式的,他想到的方法就是用toad查出来在转存到excel里。我说那得跑到什么时候去啊,设计到网络传输和数据展现,万一中间有点什么问题就展示不出来了。以前用ue的时候经常要把ue里的列放到excel里,所以知道excel的列中间分隔其实就是一个TAB,所以我想到的方法就是用spool的方式把格式化后的查询结果记录到文本里,因为文本已经有了excel需要的格式,所以应该是可以直接打开的。为了确保给他的建议能用,自己测试了下
--创建测试表并插入测试数据
SQL> create table name(id int,name varchar2(30)) tablespace btest;
Table created.
SQL> insert into name select 1,'anbaisheng' from dual;
1 row created.
SQL> insert into name select 2,'xiangxiang' from dual;
1 row created.
SQL> insert into name select 3,'kong' from dual;
1 row created.
SQL> commit;
--准备脚本1.sql
--这里要注意的是字段id和name之间并入的是TAB字符而不是空格
set wrap off
set linesize 5000
set trimspool on
set heading off
set feedback off
spool d:\1.xls
select id||' '||name from name;
spool off
--在sqlplus下调用1.sql,linux一样,不过建议后台运行
--这样就会在目的位置生成xls文件
--我的环境结果如下:
|
|
|
|
1 |
anbaisheng |
|
2 |
xiangxiang |
|
3 |
kong |
--linux下可以将类似如下代码放入 shell脚本中,之后后台运行
Sqlpus “/ as sysdba” <
Conn user/passwd
@1.sql
Exit
EOF
Exit
--补充
个人不建议大量数据一起spool到一个excel文件中的做法,excel单个文件貌似是有最大记录数的限制,虽然2007支持的数量有所增加,但太大的文件打开也是个问题,所以建议用rownum限制下每次输出的数据量,分多个文件存放比较靠谱。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13177610/viewspace-687846/ ,如需转载,请注明出处,否则将追究法律责任。