Переменная Unix не может хранить выходные данные sql-запроса

У меня возникла проблема при запуске 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. Пожалуйста, предложите.

0
24.02.2017, 18:56
1 ответ

Поскольку вы перенаправляете вывод команды в файл, нет вывода для помещения в переменную.

Вы можете использовать утилиту tee , чтобы исправить это:

STATUS=$( sqlplus ... <<EOF | tee -a logfile
...
EOF
)

tee будет дублировать свой ввод для всех названных файлов, а также для собственного стандартного вывода (который будет вставлен в вы переменная).

Кроме того, введите пароль в двойные кавычки как «$ PASSWD» , иначе у вас возникнут всевозможные проблемы, если пароль содержит специальные символы. То же самое касается "$ STATUS" , когда вы выводите его.

2
28.01.2020, 02:34

Теги

Похожие вопросы