db2 clpplus при выходе из sqlerror

#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 исключения.

Что касается некоторых конкретных предложений, вам следует отредактировать свой вопрос, включив свой код И ожидаемое поведение в минимально проверяемый пример.