Невозможно слить сгусток в db2 - PullRequest
0 голосов
/ 01 февраля 2019

У меня проблема с выполнением оператора слияния в DB2 (Version 11).Оператор работает нормально, если я опускаю предложение «WHEN MATCHED» или если предложение «WHEN MATCHED» обновляет столбец метки времени.При обновлении CLOB возникает проблема.

Оператор:

MERGE into myTable as tab
USING (VALUES (123, '<test>data</test>', CURRENT TIMESTAMP)) as src(id, xml, tstmp)
ON tab.ID = src.id
  WHEN MATCHED THEN UPDATE
      SET tab.XML = src.xml
  WHEN NOT MATCHED THEN 
      INSERT (ID, XML, CREATED_TIMESTAMP) VALUES (src.id, src.xml, src.tstmp);

Ошибка:

[Код: -907, Состояние SQL: 27000] Была сделана попытка изменить целевую таблицу "myTable ", оператора MERGE по ограничению или триггеру" AFTER_UPDATE_myTable ".. SQLCODE = -907, SQLSTATE = 27000, DRIVER = 4.22.29

Следует отметить, что я знаю, что есть только одна записьв myTable где ID = 123.

Спасибо

1 Ответ

0 голосов
/ 02 февраля 2019

SQL0907N :

SQL0907N

Предпринята попытка изменить целевую таблицу, имя-таблицы , из MERGEоператор по ограничению или триггеру имя .

Пояснение

Оператор MERGE вызвал активацию ограничения или имени триггера, который пытался обновить, вставить вили удалите из таблицы имя-таблицы , которая также является целевой таблицей или таблицей в той же иерархии таблиц, в операторе MERGE.Это недопустимо.

Ответ пользователя

Измените инструкцию MERGE, чтобы удалить операцию, вызывающую активацию ограничения или триггера, или измените таблицу с ограничениемили триггер для удаления ссылки на целевую таблицу.

Возможно, в этой таблице имеется триггер после обновления AFTER_UPDATE_myTable, который изменяет данные в той же таблице.Измените его, например, таким образом, чтобы оно не активировалось при обновлении, а именно, если возможно, столбца XML.

...