2013-08-23 1 views
1

У меня есть сценарий оболочки ksh, который запускает сценарий .sql с выражением фона и ожидания. Возможно ли, чтобы я зафиксировал общую ошибку «ORA-0» и полностью вышел из системы?unix-скрипт для выхода из ошибки oracle при использовании оператора ожидания

До сих пор:

$ORACLE_BASE/bin/sqlplus 2.sql & 
pid2=$! 
echo "Waiting for PID:$pid2" 
wait $pid2 
#look for error here 
#exit program if oracle error 
+0

Как запустить свой SQL скрипт? С SQL * Plus? – Nicolas

+0

Да, sqlplus внутри скрипта. я добавлю это на свой вопрос. спасибо – jdamae

+0

В этом конкретном примере работа SQL * Plus в фоновом режиме не служит никакой полезной цели. Просто запустите его на переднем плане, если вам нечего делать параллельно, пока он работает. – tripleee

ответ

2

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

Так, в начале вашего скрипта .sql вы добавить что-то вроде:

WHENEVER SQLERROR EXIT SQL.SQLCODE 

И если есть ошибка SQL будет выйти с соответствующим кодом ошибки.

Теперь в сценарии оболочки после wait вы можете получить ошибку, прочитав $?.

Нечто подобное (в зависимости от точного синтаксиса вашей оболочки):

wait $pid2 
ret=$? 
if [ $ret != 0 ] # if not success 
then 
    exit $ret  # propagate error code 
fi 
+0

WHENEVER - это команда unix, правильно? – jdamae

+0

Это команда SQL * Plus, я уточню свой ответ. – Nicolas

+0

Таким образом, он выйдет из sql с кодом ошибки. Итак, что мне нужно сделать, это когда он выйдет из этого SQL-оператора, он также выйдет из самой программы оболочки. Мне нужно что-то, чтобы справиться с этим. – jdamae

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