eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« How to use Oracle BFILE | Blog首页 | 美丽的樱花 »

使用SQL*PLUS,构建完美excel或html输出

通过SQL*PLUS我们可以构建友好的输出,满足多样化用户需求。
本例通过简单示例,介绍通过sql*plus输出xls,html两种格式文件.
首先创建两个脚本:
1.main.sql
用以设置环境,调用具体功能脚本
2.功能脚本-get_tables.sql
为实现具体功能之脚本
通过这样两个脚本可以避免spool中的冗余信息,参考:
如何去除SQLPLUS中SPOOL的冗余信息

示例如下:
1.main.sql脚本:
[oracle@jumper utl_file]$ more main.sql
set linesize 200 
set term off verify off feedback off pagesize 999 
set markup html on entmap ON spool on preformat off
spool tables.xls
@get_tables.sql
spool off
exit

2.get_tables.sql脚本:
[oracle@jumper utl_file]$ more get_tables.sql 
select owner,table_name,tablespace_name,blocks,last_analyzed
from all_tables order by 1,2;

3.执行并获得输出:
[oracle@jumper utl_file]$ sqlplus "/ as sysdba" @main

SQL*Plus: Release 9.2.0.4.0 - Production on Mon Apr 25 10:30:11 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production

Disconnected from Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production
[oracle@jumper utl_file]$ ls -l tables.xls 
-rw-r--r--    1 oracle   dba         69539 Apr 25 10:30 tables.xls
[oracle@jumper utl_file]$ 

此处输出为xls文件,通过下图我们可以看到输出效果:
Excel输出
把main.sql脚本中的,spool tables.xls更改为spool tables.htm,我们可以获得htm格式输出,效果如下图:
Html输出
历史上的今天...
    >> 2013-04-25文章:
    >> 2011-04-25文章:
    >> 2010-04-25文章:
           ACOUG第二次地面活动 小记
    >> 2008-04-25文章:
           春天的花开以及冬日的冰
    >> 2007-04-25文章:
           新书定稿与山海雄关
    >> 2006-04-25文章:
           我的写作进度之二

无觅

By eygle on 2005-04-25 10:55 | Comments (20) | FAQ | 271 |

20 Comments

好方法!
不过我有时候偷懒,使用toad也可以做到。

妙!!!!

html可以直接这样成为xls:-)

妙!!!

在xls中显示不了中文是为什么啊?
html是可以的

to zhanghui;

可能是你的字符集设置问题。

为什么我生成的excel只有一列,而不像作者在demo中生成的excel那样,有多列

上述spool输出只有一列的问题,是否是因为我的版本不够高,要和作者演示的excel效果一样,最低需要什么版本的客户端

我的htm格式不太正确,如下:
OWNER TABLE_NAME TABLESPACE_NAME BLOCKS LAST_ANALYZED ------------------------------ ------------------------------ ------------------------------ ---------- ------------- ADMIN1 CTEST1 GE_USER_DATA ADMIN1 CTEST2 GE_USER_DATA BCX HORIZON_2D USERS BCX HORIZON_2D_SEGMENT USERS BCX HORIZON_2D_SEGMENT_SET USERS BCX HORIZON_2D_SET USERS BCX HORIZON_3D USERS BCX HORIZON_3D_SET USERS BCX HORIZON_SET USERS BCX LINE_2D USERS BCX QUALITY_GENE_SEGMENT USERS BCX REF_COLOR_MAPS USERS BCX SURVEY USERS BCX WELL USERS BCX WELL_HORIZON USERS BCX WELL_HORIZON_SEGMENT USERS BCX WELL_TOP USERS CTXSYS DR$CLASS DRSYS CTXSYS DR$DELETE CTXSYS DR$INDEX DRSYS OWNER TABLE_NAME TABLESPACE_NAME BLOCKS LAST_ANALYZED ------------------------------

我的 table.xls 显示SP2-0640: 未连接

未连接是你的脚本有问题,没有连到数据库

怎么解决这个字符集的问题呀!!???急~~

sqlplus must be 9.x.x.x version

用java怎么调用?

请教一下:为什么我用eygle的脚本,无法实现demo显示的那样的excel文件?就是无法将每一列插入到excel对应的列里。请指教。谢谢

你的结果是什么样子的?

数据库是什么版本?

为什么我们的格式都没有作者这么美丽!文件是可以out出来就是很难看!!!!!!!!!

不错的方法

1.使用spool导出select to_char('0123456789101010101010') from dual;的结果;
2.导出的a.xls文件使用文本打开内容如下,0123456789101010101010,显示是正确的;
3.但是用excel打开会有两个问题:
A)前面的0被去掉了;
B)变成了科学计数法显示 1.23457E+20


body {font:10pt Arial,Helvetica,sans-serif; color:black; background:White;} p {font:10pt Arial,Helvetica,sans-serif; color:black; background:White;} table,tr,td {font:10pt Arial,Helvetica,sans-serif; color:Black; background:#f7f7e7; padding:0px 0px 0px 0px; margin:0px 0px 0px 0px;} th {font:bold 10pt Arial,Helvetica,sans-serif; color:#336699; background:#cccc99; padding:0px 0px 0px 0px;} h1 {font:16pt Arial,Helvetica,Geneva,sans-serif; color:#336699; background-color:White; border-bottom:1px solid #cccc99; margin-top:0pt; margin-bottom:0pt; padding:0px 0px 0px 0px;} h2 {font:bold 10pt Arial,Helvetica,Geneva,sans-serif; color:#336699; background-color:White; margin-top:4pt; margin-bottom:0pt;} a {font:9pt Arial,Helvetica,sans-serif; color:#663300; background:#ffffff; margin-top:0pt; margin-bottom:0pt; vertical-align:top;}SQL*Plus Report


0123456789101010101010

太妙了,能否对以上代码注解一下吗?
万分感谢!

显示不了中文的解决方法:

要把charset设置为gb2312就行了。

1.使用spool导出select to_char('0123456789101010101010') from dual;的结果;
2.导出的a.xls文件使用文本打开内容如下,0123456789101010101010,显示是正确的;
3.但是用excel打开会有两个问题:
A)前面的0被去掉了;
B)变成了科学计数法显示 1.23457E+20


能否具体讲解一下,谢谢


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com