2017-02-01 2 views
1

Я пытаюсь написать программу unix, в которой мне нужно подключиться к SQL DB и получить данные и сохранить их в файл.Передача имени файла spool в sqlplus из сценария оболочки

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

output1=`sqlplus -s [email protected]/password <<EOF 
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF; 
SPOOL EMP_NAMES.txt 
select emp_name from employee order by emp_name; 
Spool off; 

Это работает отлично. Но мое требование состояло в том, что я хочу передать значение файла спула таким образом, чтобы каждый раз создавался новый файл Spool.

Я в принципе хочу, чтобы добавить дату в конце имени файла, как:

date=`date +'%d/%m/%Y_%H:%M:%S:%2N'` 
output1=`sqlplus -s [email protected]/password <<EOF 
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF; 
SPOOL EMP_NAMES_$date.txt 

Пожалуйста, дайте мне знать, каким образом это можно сделать.

ответ

1

Если вы называете sqlplus с Heredoc, вы можете сделать это легко:

spool_file=: ... your date logic here ... 
sql_ouput=: ... path for sqlplus output & errors ... 
sqlplus -s [email protected]/password << EOF &> "$sql_output" 
    SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF; 
    spool $spool_file 
    # SQL statements 
    spool off 
EOF 
if [[ $? != 0 ]]; then 
    : ... error handling ... 
fi 
  • Это лучше, чтобы захватить стандартный вывод/STDERR из sqlplus в файл, а не переменной оболочки.
  • Я думаю, что это возможно, чтобы скрыть пароль, удалив его из командной строки и добавить его в качестве первой линии Heredoc (это предотвратит пароль от показа в ps)

Взгляните на это связано Должность: Connect to sqlplus in a shell script and run SQL scripts

+0

Спасибо @codeforester за супер быстрый ответ !!! Ive пробовал предлагаемые шаги, но все еще получал ошибку. spoolFile = "SPOOL_FILE _" $ date ".txt" output1 = 'sqlplus -s username @ SID/pwd << EOF SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF COLSEP |; SPOOL $ spoolFile Запрос ... SPOOL OFF; Пожалуйста, дайте мне знать, если есть какой-то шаг, который я пропустил. Спасибо заранее. –

+0

Является ли «EOF» в самом начале строки, и на этой строке нет других персонажей? Какая ошибка вы получаете? – codeforester

+0

Его в конце линии, как - output1 = 'Sqlplus -s имя пользователя @ SID/PWD << EOF Ошибка как - ./Shell.sh: линия 351: SPOOL_FILE.txt: Нет такой файл или каталог –

Смежные вопросы