Я пытаюсь обновить записи таблицы на основе некоторого условия. Когда я обновляю несколько последних записей, он работает нормально, но когда я запускаю его для большего количества записей или более старых записей, он выдает ошибки Запрос :
update table_Name set Col1 = 'C'
where date(TRN_SCH_DPT_DT) < current date - 200 DAYS
Работает отлично!
update table_Name set Col1 = 'C'
where date(TRN_SCH_DPT_DT) < current date - 100 DAYS
Выдает ошибку => Ошибка SQL DB2:
SQLCODE=-803, SQLSTATE=23505, SQLERRMC=2
Примечание. Я не обновляю первичный ключ. Любое число больше 200 работает нормально.
Примечание: Ваш текущий запрос, возможно, игнорирует любой индекс, который может быть у вас на TRN_SCH_DPT_DT. Было бы лучше, если бы вы написали условие как WHERE TRN_SCH_DPT_DT < TIMESTAMP(CURRENT DATE - 100 DAYS)


В описании SQL0803N есть оператор SELECT, который может помочь вам найти уникальный индекс (с IID=2), который пытается нарушить ваш оператор.
SELECT INDNAME, INDSCHEMA
FROM SYSCAT.INDEXES
WHERE IID = 2
AND TABSCHEMA = 'TABLE_SCHEMA' AND TABNAME = 'TABLE_NAME'
Возможно, вы захотите включить в свой ответ основные моменты из ссылки, чтобы ссылка не устарела.
Найдите уникальное ограничение, которое вы нарушаете, и исправьте его. Лучше использовать MERGE для таких случаев.