У меня возникла проблема при запуске sql из sqlplus и я хочу назначить o / p переменной Unix. Результат отображается правильно в файле журнала, но не присваивается переменной. code:
Переменная PASSWD содержит имя пользователя / пароль / данные БД.
STATUS=`sqlplus -s /nolog <<EOF>> /home/test_db.log
CONNECT ${PASSWD}
WHENEVER OSERROR EXIT FAILURE
WHENEVER SQLERROR EXIT SQL.SQLCODE
set termout off
set showmode off
set heading off
set echo off
set timing off
set time off
set feedback 0
set pagesize 0
set embedded ON
set verify OFF
select status from int_control_tab where rec_no=877 and process_date=to_date('15/02/2017','dd/mm/yyyy');
exit;
EOF`
echo "STATUS :" ${STATUS}
Даже я получаю o / p, т.е. 1 значение в файле журнала, но не присваиваю значение переменной STATUS. Пожалуйста, предложите.
Поскольку вы перенаправляете вывод команды в файл, нет вывода для помещения в переменную.
Вы можете использовать утилиту tee
, чтобы исправить это:
STATUS=$( sqlplus ... <<EOF | tee -a logfile
...
EOF
)
tee
будет дублировать свой ввод для всех названных файлов, а также для собственного стандартного вывода (который будет вставлен в вы переменная).
Кроме того, введите пароль в двойные кавычки как «$ PASSWD»
, иначе у вас возникнут всевозможные проблемы, если пароль содержит специальные символы. То же самое касается "$ STATUS"
, когда вы выводите
его.