最近由于工作原因,需要把sqlplus里面SQL结果输出到html里面去,本来想用PLSQL Developer这个工具的,但是想到不是每个环境都是可以安装的,所以就研究了一下。
通过研究发现原来oracle是有这方面介绍的。在oracle文档中
SQL*Plus User's Guide and Reference=》7 Generating HTML Reports from SQL*Plus这章就有介绍
文档中有个例子:
SET MARKUP指明SQL*Plus输出HTML编码格式,必须使用SET MARKUP HTML ON SPOOL ON和SQL*Plus SPOOL命令去创建一个spool文件,并且以HTML格式输出。SET MARKUP习惯称作SQLPLUS -MARKUP命令。
在sqlplus里面我们输入help set就能看到相关语法
HTML [ON|OFF]:
指定是否生成HTML格式,ON生成,OFF不生成,默认是OFF。
HEAD text:
指定HTML中HEAD标签中的内容,默认情况下,文本包括级联样式和标题。
BODY text:
指定HTML中BODY标签属性
TABLE text:
设置<TABLE>标签的属性,如BORDER, CELLPADDING, CELLSPACING和WIDTH.。默认情况下, <TABLE> 的WIDTH属性设置为90%,BORDER属性设置为1。
ENTMAP {ON|OFF}:
指定在SQL * Plus中是否用HTML字符实体如<, >, " and &等替换特殊字符<, >, " and & 。默认 设置是ON。例如:
SPOOL {ON|OFF}:
指定是否在SQL*Plus生成HTML标签<HTML> 和<BODY>, </BODY> 和</HTML>。默认是OFF。
PRE[FORMAT] {ON|OFF}
指定SQL*Plus生成HTML时输出<PRE>标签还是HTML表格,默认是OFF,因此默认输出是写HTML表格。
上面的属性我们常用的也就那几个,下面我给大家做一个我自己的例子,这个例子可以接受控制台的参数,也可以接受sql运行结果当参数。
SET markup html ON spool ON pre off entmap off
set term off
set heading on
set verify off
set feedback off
set linesize 2000
set pagesize 30000
set long 999999999
set longchunksize 999999
column id format a30
column super_id format a30
column levels format 9999999999
column table_name format a30
column owner format a30
set term on
prompt "input schema:" --从控制台接受变量值
define S_SCHEMA=&SCHEMA
set term off
column dbid new_value spool_dbid --列dbid值给变量spool_dbid
column inst_num new_value spool_inst_num
select dbid from v$database where rownum = 1; --给dbid赋值
select instance_number as inst_num from v$instance where rownum = 1;
column spoolfile_name new_value spoolfile
select 'spool_'||(select name from v$database where rownum=1) ||'_'|| (select instance_name from v$instance where rownum=1)
||'_'||to_char(sysdate,'yy-mm-dd_hh24.mi')||'_static' as spoolfile_name from dual;
spool &&spoolfile..html
prompt <p>版本
select t.id,t.super_id,t.levels from T1 t;
prompt <p>整个用户有多大 单位GB
select sum(bytes)/1024 /1024 /1024 "GB"
from dba_segments
where owner = '&S_SCHEMA';
prompt <p>测试
select t.id,t.super_id,t.levels from T1 t;
spool off;