UNIX脚本将SQL查询输出提取到文件

时间:2010-12-29 14:14:35

标签: oracle shell unix

我有一个SQL脚本

select fh.box_name 
from file_update_history fh,update_file_vw ff
WHERE
ff.file_id=fh.file_id 
and fh.act_record_count IS NULL
AND FF.STATUS_CD <> 'OLD'
and to_char(fh.access_date,'YYYYMMDD') between to_char(SYSDATE, 'YYYYMMDD') and to_char(SYSDATE+1, 'YYYYMMDD')
order by fh.exp_arr_time_update_file,FF.FILE_NAME;

我需要将此SQL的输出/假脱机变为平面文件。哪个应该有查询输出。我没有将查询的输出到文件中。

我用过

sqlplus /NOLOG <<My_DB > $DB_OUTPUT_FILE
set feedback on;
set term on;
set echo on;
set heading off;
set underline off;
set pagesize 10000;
set linesize 999;
set wrap off;
WHENEVER SQLERROR EXIT 20;
connect ${My_DB_USER}/${My_DB_PASSWORD} ;
select fh.box_name 
from file_update_history fh,update_file_vw ff
WHERE
ff.file_id=fh.file_id 
and fh.act_record_count IS NULL
AND FF.STATUS_CD <> 'OLD'
and to_char(fh.access_date,'YYYYMMDD') between to_char(SYSDATE, 'YYYYMMDD') and to_char(SYSDATE+1, 'YYYYMMDD')
order by fh.exp_arr_time_update_file,FF.FILE_NAME;
exit
My_DB

2 个答案:

答案 0 :(得分:1)

使用spool命令可能更容易:

sqlplus /NOLOG <<My_DB
set feedback on
set term on
set echo on
set heading off
set underline off
set pagesize 10000
set linesize 999
set wrap off
WHENEVER SQLERROR EXIT 20
connect ${My_DB_USER}/${My_DB_PASSWORD}
SET ECHO OFF
SET TERM OFF
SPOOL ${DB_OUTPUT_FILE}
select fh.box_name 
from file_update_history fh,update_file_vw ff
WHERE
ff.file_id=fh.file_id 
and fh.act_record_count IS NULL
AND FF.STATUS_CD <> 'OLD'
and to_char(fh.access_date,'YYYYMMDD') between to_char(SYSDATE, 'YYYYMMDD') and to_char(SYSDATE+1, 'YYYYMMDD')
order by fh.exp_arr_time_update_file,FF.FILE_NAME;
SET SPOOL OFF
exit
My_DB

答案 1 :(得分:0)

;声明的结尾不需要connect;现在无法检查,但是可能是导致错误,还是凭据错误?输出文件是否完全为空?什么是sqlplus命令的返回码 - 零或20?

您可以将WHENEVER SQLERROR更改为EXIT SQL.SQLCODE以更好地了解出现了什么问题 - 尽管它应该在输出中 - 但有些炮弹不理解大数字。