#db2 #whenever
#db2 #всякий раз, когда
Вопрос:
короткий вопрос. Я хочу создать небольшой скрипт DB2 CLPLUS, который завершает работу при возникновении ошибки sqlerror и выполняет откат. Проблема в том, что при использовании WHENEVER SQLERROR EXIT также завершается сеанс CLPPLUS. Но это не то, чего я хочу. Должен быть прерван только скрипт, больше ничего. Примечание: Скрипты включают в себя два или более операторов sql. После того, как первые инструкции sql генерируют ошибку, сценарий должен завершаться, а другие инструкции не должны выполняться.
С уважением, Ральф
Ответ №1:
Если ваша цель состоит в том, чтобы перехватить исключение, а затем временно продолжить и обработать это исключение, включая выполнение (условного) отката и последующего выхода, тогда вам следует использовать WHENEVER SQLERROR CONTINUE ...
, за которым следует блок, включающий ваш обработчик исключений.
Если вы используете WHENEVER SQLERROR EXIT
, то документированное поведение clpplus заключается в обратном выходе в операционную систему. Если вы не хотите такого поведения, используйте WHENEVER SQLERROR CONTINUE...
вместо этого.
Помните, что некоторые SQLCODES имеют неявный откат, уже выполненный Db2 (например, -911 и связанные), поэтому вам может потребоваться отфильтровать SQLCODE исключения.
Что касается некоторых конкретных предложений, вам следует отредактировать свой вопрос, включив свой код И ожидаемое поведение в минимально проверяемый пример.