Понадобился мне констрейнт для проверки дублирующих записей в таблице, в которой уже присутствовали дубли. Добавил NOVALIDATE при создании и получил ошибку:
ORA-02299: cannot validate - duplicate keys found
Как выяснилось, при создании уникального ограничения создается уникальный индекс (не всегда, если оракл находит подходящий индекс - он будет использован). Выходом из ситуации стало добавление ключевого слова DEFERRABLE:
alter table TBL_1
add constraint UK_TBL_1#NO_DOUBLE unique (col1, col2, col3, col4, col5)
deferrable
novalidate
DEFERRABLE делает так, что создается НЕуникальный индекс и констрейнт благополучно создается.
Также, можно было создать неуникальный индекс с самого начала и уже потом создать NOVALIDATE констрейнт.
ORA-02299: cannot validate - duplicate keys found
Как выяснилось, при создании уникального ограничения создается уникальный индекс (не всегда, если оракл находит подходящий индекс - он будет использован). Выходом из ситуации стало добавление ключевого слова DEFERRABLE:
alter table TBL_1
add constraint UK_TBL_1#NO_DOUBLE unique (col1, col2, col3, col4, col5)
deferrable
novalidate
DEFERRABLE делает так, что создается НЕуникальный индекс и констрейнт благополучно создается.
Также, можно было создать неуникальный индекс с самого начала и уже потом создать NOVALIDATE констрейнт.
Немає коментарів:
Дописати коментар