今天遇到一个将oracle里查询的数据写入到本地文件的小需求,主要使用到了spool命令.spool的作用可以用一句话来描述:在sqlplus中用来保存或打印查询结果。
做个记录,以便日后查询
以下是代码:
sqlplus -S "BJ_UCR_STA_SALE1/123456@132.77.153.220:1526/wxwldb"<<!
set echo off
set feedback off
set newpage none
set verify off
set pagesize 0
set termout off
set trimspool off
set trims on
set linesize 6000
set heading off
set timing off
set numwidth 38
SPOOL $fileName
select a.SERIAL_NUMBER
||chr(1)||a.CREATE_STAFF_ID
||chr(1)||TO_CHAR(a.CREATE_DATE,'YYYYMMDD HH:MM:SS') CREATE_DATE
from BJ_UCR_STA_CEN.TF_SM_NOTDISTURB_LIST a
where SYSDATE BETWEEN BEGIN_DATE AND END_DATE;
spool off
exit
!
这样做的话对于数据量小的时候没有问题,但是对于数据量大的情况,存在一个很难受的情况,就是执行脚本的时候会一直把查询到的数据打印到屏幕,造成刷屏,百度了半天说是要将以下三个选项设置如下:
set echo off
set feedback off
set termout off
我照做了,但是问题照旧,原因是这些设置只在oracle里执行生效,在shell里是没有效果的
最终的解决办法应该是把要执行的sql