需求是将指定的批量sql语句执行的结果通过脚本导出成txt或者能用excel打开的文件。
oracle导出文件可以通过spool命令实现,通过bat脚本登录sqlplus,然后引入sql文件即可,源码如下:
chcp 936 --将当前dos命令的编码格式改为gkb
mshta vbscript:msgbox("开始生成报表!",6,"生成报表")(window.close) --输出信息
sqlplus user/name@x.x.x.x:1521/实例名 @xxx.sql --数据库连接配置
mshta vbscript:msgbox("报表生成执行完毕!",6,"生成报表")(window.close)
xxx.sql:
其中
set linesize 9999
set echo off
set pagesize 0
set serveroutput off
set feedback off
set newpage none
set trimout on
set trimspool on
set colsep ','
set wrap off
set trimspool on
@./index索引/创建索引.sql
select '正在生成xxx报表;' from dual;
set term off --关闭屏幕打印
spool ./报表新票据/(直贴)买入库存余额查询.csv
@./sql新票据/(直贴)买入库存余额查询.sql
spool off
set term on
select '正在生成xxx报表;' from dual;
set term off
spool ./报表新票据/(转、再贴)买断式买入库存余额查询.csv
@./sql新票据/(转、再贴)买断式买入库存余额查询.sql
spool off
set term on
select '正在生成xxx报表;' from dual;
set term off
附:
sqlplus常用命令:
set echo on/off 是否显示脚本中的需要执行的命令
set feedback on/off 是否显示结果之后返回多少行的提示
set linesize n 设置一行最多显示多少字符
set timing on/off 显示sql语句执行多长时间
set termout on/off 在执行脚本时是否在屏幕上输出结果,如果 spool 到文件可以将其关闭
set heading on/off 是否显示查询结果的列名
set pagesize n 设置每页的行数
set trimspool on/off 在 spool 到文件时是否去除输出结果中行末尾的空白字符,之前的隔行可以用该参数去掉,和该参数对应的是 trimout,后者用于屏幕输出
set trimout on/off 是否去掉屏幕上输出结果行末尾的空白字符
set feedback on/off 是否显示结果之后返回多少行的提示
set linesize n 设置一行最多显示多少字符
set timing on/off 显示sql语句执行多长时间
set termout on/off 在执行脚本时是否在屏幕上输出结果,如果 spool 到文件可以将其关闭
set heading on/off 是否显示查询结果的列名
set pagesize n 设置每页的行数
set trimspool on/off 在 spool 到文件时是否去除输出结果中行末尾的空白字符,之前的隔行可以用该参数去掉,和该参数对应的是 trimout,后者用于屏幕输出
set trimout on/off 是否去掉屏幕上输出结果行末尾的空白字符