Если вы хотите использовать обработчик исключений, вы должны использовать «Составной SQL (скомпилированный)», и один из способов указать, что это использовать BEGIN, а не BEGIN ATOMIC. Возможны другие способы.
IBM Db2-LUW имеет два разных типа составных SQL-блоков для группировки нескольких операторов SQL PL.
Каждый вид имеет свои преимущества и ограничения.
Первый тип является встроенным (он становится частью оператора вызова после компиляции), и в документации это называется «составной SQL (встроенный)».
Составной SQL (встроенный) предлагает только подмножество операторов SQL и требует синтаксиса BEGIN ATOMIC в начале блока.
В вашем примере вы показываете BEGIN ATOMIC, и вам нужно знать, что это запрещает объявлять обработчики внутри блока, потому что именно блок (или инструкция) вызывает встроенную функцию, которая должна обрабатывать ошибки. В документации показаны операторы , разрешенные в составном встроенном блоке .
Второй вид не является встроенным (он компилируется и хранится отдельно от оператора (ов), которые его вызывают). В документации это называется «составной SQL (скомпилированный)».
Составной SQL (скомпилированный) допускает больший диапазон операторов SQL PL по сравнению со встроенным типом, и сложный SQL (скомпилированный) не обязательно должен быть атомарным (т. Е. Он может иметь точки сохранения, фиксации и откаты, обработчики исключений и т. Д.). Документация здесь .