Создать уникальный индекс для таблицы с повторяющимися строками в Oracle - PullRequest
0 голосов
/ 26 марта 2020

У меня есть таблица, которая имеет УНИКАЛЬНЫЙ ИНДЕКС на 6 разных столбцах. Однако в таблице есть дубликаты. Когда я удаляю индекс и пытаюсь воссоздать его, он выдает ошибку, говорящую о наличии повторяющихся значений.

Есть ли способ, которым я могу иметь дублирующиеся строки и все же создать уникальный индекс?

Я вижу, что есть ограничения NOVALIDATE для ограничений. Есть ли что-нибудь похожее для индексов.

Я предполагаю, что должен быть способ, поскольку в таблице есть дублирующиеся строки с действительным УНИКАЛЬНЫМ ИНДЕКСОМ.

Пожалуйста, помогите.

Ответы [ 2 ]

2 голосов
/ 27 марта 2020

Вы можете создать УНИКАЛЬНЫЙ индекс для вашей таблицы, даже если он имеет дубликаты, если вы пометите индекс как НЕПРАВИЛЬНЫЙ. Это означает, что индекс будет существовать, но система не сможет его использовать. Для этого используйте команду, аналогичную

CREATE UNIQUE INDEX UNUSABLE_UNIQUE_IDX_SUCCEEDS
  ON TABLE_WITH_DUPS(ID)
  UNUSABLE

db <> fiddle здесь

CREATE INDEX документы здесь

0 голосов
/ 27 марта 2020

Как будто вы не хотите получать ошибку ORA-00001 Unique constraint violated ошибка во время нескольких операций вставки, даже если происходит нарушение , если вставленные данные зафиксированы . Затем вы можете сделать уникальный ключ deferrable initially deferred, например,

alter table tab
  drop constraint Ukey [cascade]; 

alter table tab
  add constraint Ukey unique ( col1, col2, ..., col6 )
  deferrable initially deferred

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

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