Сценарий UNIX Извлекает выходные данные SQL-запроса в файл - PullRequest
1 голос
/ 29 декабря 2010

У меня есть сценарий 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 ]

1 голос
/ 29 декабря 2010

Вероятно, проще использовать команду спула:

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
0 голосов
/ 29 декабря 2010

Вам не нужен ; a конец оператора connect;не могу проверить прямо сейчас, но возможно ли это, что вызывает ошибку, или что учетные данные неверны?Выходной файл полностью пуст?И какой код возврата в команде sqlplus - ноль или 20?

Вы можете изменить WHENEVER SQLERROR на EXIT SQL.SQLCODE, чтобы получить лучшее представление о том, что пошло не так - хотя он должен быть в выводев любом случае - но некоторые оболочки не понимают больших чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...