Вопрос или проблема
Имя файла: /u02/app/scmdw/scr/appcheck.sql
Shell-скрипт: test.ksh
#!/bin/ksh
line=sqlplus $SCMDWSA @/u02/app/scmdw/scr/appcheck.sql
echo “Результат SQL: line = $line”
Можете ли вы помочь мне, как использовать ‘whenever SQLERROR’ при выполнении SQL-скрипта appcheck.sql?, и я хочу захватить ошибку в переменную ‘line’, если путь к SQL-скрипту или имя файла недействительны
.
Ответ или решение
Вопрос о том, как использовать директиву whenever SQLERROR
в SQL скрипте на UNIX, представляет собой важную задачу для администраторов баз данных и специалистов по информационным технологиям. Данная инструкция поможет вам не только интегрировать обработку ошибок в ваш SQL скрипт, но и эффективно управлять возможными сбоями при его выполнении.
Шаги для использования whenever SQLERROR
-
Измените ваш SQL-скрипт: Внутри файла
appcheck.sql
, добавьте директивуwhenever SQLERROR
в самом начале скрипта. Эта директива гарантирует, что SQL*Plus прекратит выполнение при возникновении ошибки:SET ECHO ON WHENEVER SQLERROR EXIT SQL.SQLCODE
С помощью этой директивы, если в процессе выполнения скрипта произойдет ошибка, SQL*Plus завершит работу и вернет код ошибки.
-
Обновите ваш shell-скрипт: Измените ваш shell-скрипт
test.ksh
, чтобы он корректно обрабатывал ошибки и сохранял сообщения об ошибках в переменнойline
. Вот как это можно сделать:#!/bin/ksh line=$(sqlplus -s $SCMDWSA @/u02/app/scmdw/scr/appcheck.sql 2>&1) exit_code=$? if [ $exit_code -ne 0 ]; then echo "Произошла ошибка при выполнении SQL скрипта: ${line}" else echo "Результат выполнения SQL: line = ${line}" fi
В этом скрипте используется параметр
-s
для SQL*Plus, чтобы избежать лишнего вывода. Вывод ошибок перенаправляется в переменнуюline
с помощью2>&1
, что позволяет захватывать как стандартный вывод, так и сообщения об ошибках. -
Обработка ошибок: Мы добавили проверку кода завершения выполнения SQL-скрипта. Если код завершения (переменная
$?
) не равен нулю, это означает, что возникла ошибка, и информация об этой ошибке будет выведена на экран.
Объяснение кода
sqlplus -s $SCMDWSA @/u02/app/scmdw/scr/appcheck.sql 2>&1
: Выполняет SQL скрипт, перенаправляя ошибки в стандартный вывод.exit_code=$?
: Сохранение кода завершения последней выполненной команды. Код равный нулю означает успешное выполнение.- Проверка на ошибку: если код завершения не равен нулю, выводится сообщение с информацией об ошибке.
Заключение
Использование директивы whenever SQLERROR
в сочетании с надлежащей обработкой ошибок в shell-скриптах гарантирует, что вы сможете контролировать выполнение ваших SQL скриптов и эффективно справляться с возникающими проблемами. Эта методология также помогает в автоматизации процессов и повышает надежность ваших операций с базами данных.
Надеюсь, данное руководство окажется полезным для вас, и позволит без труда интегрировать обработку ошибок в ваши SQL и shell-скрипты.