Как отлавливать исключения в функциях использования DB2 - PullRequest
0 голосов
/ 25 апреля 2019

Я сообщаю об ошибке при запуске этого кода.По какой-то причине я должен добавить ATOMIC после BEGIN для выполнения функции, но это конфликтует с SQLEXCEPT в теле функции.Что мне делать?

Когда я вызываю функцию, я всегда сообщаю об ошибке SQL0390N.Кто-то сказал мне добавить ATOMIC в функцию после BEGIN, но я обнаружил исключение в функции.

CREATE OR REPLACE FUNCTION IS_DATE(INDATE VARCHAR(10)) 
  RETURN INTEGER
  LANGUAGE SQL
BEGIN ATOMIC
  DECLARE V_DATE DATE;
  DECLARE EXIT HANDLER FOR SQLEXCEPTION
  BEGIN
      RETURN 0;
  END;
  SET V_DATE = TO_DATE(INDATE,'YYYYMMDD');

  RETURN 1;
END;

Эти операторы создадут конфликты «BEGIN ATOMIC» и «DECLARE EXIT HANDLER FOR SQLEXCEPTION». Пожалуйста, сообщитемне что делать ....

1 Ответ

1 голос
/ 25 апреля 2019

Если вы хотите использовать обработчик исключений, вы должны использовать «Составной SQL (скомпилированный)», и один из способов указать, что это использовать BEGIN, а не BEGIN ATOMIC. Возможны другие способы.

IBM Db2-LUW имеет два разных типа составных SQL-блоков для группировки нескольких операторов SQL PL.

Каждый вид имеет свои преимущества и ограничения.

Первый тип является встроенным (он становится частью оператора вызова после компиляции), и в документации это называется «составной SQL (встроенный)».

Составной SQL (встроенный) предлагает только подмножество операторов SQL и требует синтаксиса BEGIN ATOMIC в начале блока.

В вашем примере вы показываете BEGIN ATOMIC, и вам нужно знать, что это запрещает объявлять обработчики внутри блока, потому что именно блок (или инструкция) вызывает встроенную функцию, которая должна обрабатывать ошибки. В документации показаны операторы , разрешенные в составном встроенном блоке .

Второй вид не является встроенным (он компилируется и хранится отдельно от оператора (ов), которые его вызывают). В документации это называется «составной SQL (скомпилированный)».

Составной SQL (скомпилированный) допускает больший диапазон операторов SQL PL по сравнению со встроенным типом, и сложный SQL (скомпилированный) не обязательно должен быть атомарным (т. Е. Он может иметь точки сохранения, фиксации и откаты, обработчики исключений и т. Д.). Документация здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...