Я написал сценарий bash для подключения к sqlplus и выполнения всех сценариев sql в определенной папке.Ниже приведен метод выполнения скрипта.
execute() {
if [ ! -d "$DIR_SqlFiles" ]
then
echo "No sql files were found. Cannot find path ${DIR_SqlFiles}"
return 1
fi
echo "`date` :Connecting To ${userName}/******@${serviceName}";
for file in `ls ${DIR_SqlFiles}/*` ; do
echo "`date` :Executing file $file..."
echo "`date` :SQL OUTPUT:";
sqlplus -s ${userName}/${password}@${host}:${port}/${serviceName} <<EOF
WHENEVER OSERROR EXIT 1 ROLLBACK;
WHENEVER SQLERROR EXIT 1 ROLLBACK
@${file};
commit;
quit;
EOF
sql_return_code=$?
if [ ${sql_return_code} != 0 ]
then
echo "`date` ${file} failed"
echo "Error code ${sql_return_code}"
return 1;
fi
done
echo "`date` :completed running all sql scripts in the ${DIR_SqlFiles} folder."
return 0;
}
Проблема заключается в том, что один из файлов .sql имеет ORA-02291: ограничение целостности, этот скрипт не завершится ошибкой.Возвращает 0 и выводит «0 строк обновлено», не печатая фактическую ошибку.
В других случаях работает нормально.Например, в случае неправильного имени таблицы (ORA-00942: таблица или представление не существует) скрипт завершится ошибкой и вернет 1.
Может кто-нибудь указать мне правильное направление.Почему в первом случае ошибки не перестают работать?