FoxBase!
msgbartop
Блог Oracle разработчика
msgbarbottom
foxbase

13.08.2010 Изменение уникального ключа в Oracle

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

Допустим, вы создавали уникальный ключ такой DDL командой:

ALTER TABLE TABLE_1
  ADD CONSTRAINT TABLE_1_UK
  UNIQUE (ID_1,ID_2);
Затем вам потребовалось включить в уникальный ключ еще один атрибут таблицы. Удаляем существующий уникальный ключ:

ALTER TABLE TABLE_1
  DROP CONSTRAINT TABLE_1_UK;
Затем создаем новый:

ALTER TABLE TABLE_1
  ADD CONSTRAINT TABLE_1_UK
  UNIQUE (ID_1,ID_2,ID_3);
и получаем ошибку ORA-00955: имя уже задействовано для существующего объекта.

С непривычки можно поломать голову, в чем же здесь дело, ведь мы уже удалили первичный ключ с именем  TABLE_1_UK
А дело здесь в том, что при создании уникального ключа автоматически создается индекс с таким же именем, как и уникального ключа. При попытке снова создать уникальный ключ с именем TABLE_1_UK производится попытка автоматически создать индекс с именем TABLE_1_UK, а такой индекс уже существует, и создан он был вместе с созданием первого в нашем примере уникального ключа. 
Соответственно, чтобы правильно пересоздать уникальный ключ таблицы Oracle необходимо  после удаления уникального ключа удалить и связанный с ним индекс:

ALTER TABLE TABLE_1
  DROP CONSTRAINT TABLE_1_UK;

DROP INDEX TABLE_1_UK;

www.foxbase.ru



Смотрите также:



Оставьте свой комментарий

Вы должны быть авторизированны, чтобы оставить комментарий.