Как использовать whenever SQLERROR при выполнении SQL-скрипта в оболочке UNIX.

Вопрос или проблема

Имя файла: /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

  1. Измените ваш SQL-скрипт: Внутри файла appcheck.sql, добавьте директиву whenever SQLERROR в самом начале скрипта. Эта директива гарантирует, что SQL*Plus прекратит выполнение при возникновении ошибки:

    SET ECHO ON
    WHENEVER SQLERROR EXIT SQL.SQLCODE

    С помощью этой директивы, если в процессе выполнения скрипта произойдет ошибка, SQL*Plus завершит работу и вернет код ошибки.

  2. Обновите ваш 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, что позволяет захватывать как стандартный вывод, так и сообщения об ошибках.

  3. Обработка ошибок: Мы добавили проверку кода завершения выполнения SQL-скрипта. Если код завершения (переменная $?) не равен нулю, это означает, что возникла ошибка, и информация об этой ошибке будет выведена на экран.

Объяснение кода

  • sqlplus -s $SCMDWSA @/u02/app/scmdw/scr/appcheck.sql 2>&1: Выполняет SQL скрипт, перенаправляя ошибки в стандартный вывод.
  • exit_code=$?: Сохранение кода завершения последней выполненной команды. Код равный нулю означает успешное выполнение.
  • Проверка на ошибку: если код завершения не равен нулю, выводится сообщение с информацией об ошибке.

Заключение

Использование директивы whenever SQLERROR в сочетании с надлежащей обработкой ошибок в shell-скриптах гарантирует, что вы сможете контролировать выполнение ваших SQL скриптов и эффективно справляться с возникающими проблемами. Эта методология также помогает в автоматизации процессов и повышает надежность ваших операций с базами данных.

Надеюсь, данное руководство окажется полезным для вас, и позволит без труда интегрировать обработку ошибок в ваши SQL и shell-скрипты.

Оцените материал
Добавить комментарий

Капча загружается...