使用sqlplus生成txt报表
需求:通过在数据库上跑脚本来生成txt文件的报表(csv格式),使用逗号隔开每一项内容
使用sqlplus的spool来实现
下面列出调试成功的sql.(scott下的emp表)
在sql提示符下面输入@此文件名.sql来调用,在当前文件夹下生成report.txt文件
注:如果直接复制此内容到sql窗口中执行会导致生成的报表文件中出现其他废字符,需要手动修改,所以建议使用上面的方法
-- 关闭输出(避免产生不需要的数据)
set echo off
-- 在sql文件所在文件夹生成emp.txt文件
spool emp.txt
-- 关闭回显本次sql命令处理的记录条数
set feedback off
-- 每行最大字符数3000
set linesize 3000
-- 每页行数
set pagesize 0
-- sql命令前的提示
set sqlprompt ''
-- 去除重定向(spool)输出每行的拖尾空格 默认为off
set trimspool on
select '员工号' || ','
|| '员工姓名' || ','
|| '工作' || ','
|| '部门经理' || ','
|| '参加工作日期' || ','
|| '工资' || ','
|| '奖金' || ','
|| '部门编号'
from dual
union all
select empno || ','
|| ename || ','
|| job || ','
|| mgr || ','
|| to_char(hiredate,'yyyy-MM-dd') || ','
|| sal || ','
|| comm || ','
|| deptno
from emp;
spool off
-- 下面依次还原设置的参数到默认设置
set echo on
set feedback on
set linesize 100
set pagesize 24
set sqlprompt SQL>
set trimspool off
spool常用的设置
set colsep','; //域输出分隔符
set echo off; //显示脚本中的每个sql命令,缺省为on
set feedback off; //回显本次sql命令处理的记录条数,缺省为on
set heading off; //输出域标题,缺省为on
set pagesize 0; //输出每页行数,缺省为24,为了避免分页,可设定为0。
set termout off; //显示脚本中的命令的执行结果,缺省为on
set trimout on; //去除标准输出每行的拖尾空格,缺省为off
set trimspool on; //去除重定向(spool)输出每行的拖尾空格,缺省为off
导出文本数据的建议格式: SQL*PLUS环境设置
set echo off
set feedback off
set linesize 3000
set pagesize 0
set sqlprompt ''
set trimspool on
注:LINESIZE要稍微设置大些,免得数据被截断,它应和相应的TRIMSPOOL结合使用防止导出的文本有太多的尾部空格。
如果LINESIZE设置太大,会大大降低导出的速度
使用sqlplus生成html报表
通过在数据库上跑脚本来生成html文件的报表,使用html标记来显示内容
解决:只需要在刚刚的sql中加入下面一行即可实现此需求:
SET MARKUP HTML ON
优化:可以改变sql来增强效果:
select '员工号' ,
'员工姓名' ,
'工作' ,
'部门经理' ,
'参加工作日期' ,
'工资' ,
'奖金' ,
'部门编号'
from dual
union all
select to_char(empno) ,
ename ,
job ,
to_char(mgr) ,
to_char(hiredate,'yyyy-MM-dd') ,
to_char(sal) ,
to_char(comm) ,
to_char(deptno)
from emp;
注:附件内容
csvreport.sql 生成csv文件格式的报表
htmlreport.sql生成html文件格式的报表
关于小数字段的精度丢失解决...
在涉及到带小数的字段的时候,如果为.00的情况会丢失精度
解决方法:
trim(to_char(sal,'99999999999999.99'))
注:上面的99999999999999.99串是自定义的,请根据字段的大小酌情定义其长度
但是这个方法有个小问题,当值为0.00的时候,转换出来的字符串为:.00
当前还没有什么好点的办法来解决这个问题,把9改成0的话是可以,但前面会用0来替代空格,这样的话反而实现不了需求....
如果不考虑效率,可以用case处理下为0.00的情况
如下:
(case comm when 0.00 then '0.00' else trim(to_char(comm,'99999999999999.99')) end)
分享到:
相关推荐
NULL 博文链接:https://xw302.iteye.com/blog/1265443
sqlplus常用命令.txt
oracle sqlplus 常用命令大全.txt
Linux下面使用sqlplus热键冲突 解决方案包中包括:libtermcap-devel-2.0.8-46.1.i386.rpm rlwrap-0.42.tar.gz readline-devel-5.1-1.1.i386.rpm
rac数据库升级sqlplus脚本.txt
cmd窗口使用sqlplus
SQLPLUS命令使用大全SQLPLUS命令使用大全SQLPLUS命令使用大全SQLPLUS命令使用大全
使用SQLPlus.rar使用SQLPlus.rar使用SQLPlus.rar
本文档详细罗列了SQLPLUS命令,并举例说明了怎么使用。对学习SQLPLUS非常有帮助
sqlplus命令的使用大全sqlplus命令的使用大全sqlplus命令的使用大全sqlplus命令的使用大全sqlplus命令的使用大全sqlplus命令的使用大全
SQLPlus命令使用大全,Oracle基础知识
oracle sqlplus 工具的使用
SQLPLUS命令的使用大全
Oracle SQLPLUS基础及sqlplus命令详解,详细阐述了oracle sqlplus基本命令和相关用法
sqlplus中的命令使用手册,内容比较全,和大家分享一下。
介绍了在sqlplus的常见语法,set linesize,set pagesize等,设置数据库时间格式,设置字符集