Присвойте автоинкрементное значение новому столбцу в Oracle - PullRequest
1 голос
/ 28 октября 2008

У меня есть эта таблица в БД Oracle, первичный ключ которой определен в 3 столбцах данных. Я хочу удалить ограничение первичного ключа, чтобы разрешить строки с дублирующимися данными для этих столбцов, и создать новый столбец 'id', который будет содержать автоматически увеличивающийся целочисленный идентификатор для этих строк. Я знаю, как создать последовательность и инициировать добавление идентификатора с автоинкрементом для новых строк, добавляемых в таблицу, но возможно ли написать оператор PL / SQL для добавления уникальных идентификаторов ко всем строкам, которые уже находятся в таблице?

Ответы [ 4 ]

5 голосов
/ 28 октября 2008

Как только вы создали последовательность:

update mytable
set id = mysequence.nextval;
3 голосов
/ 28 октября 2008

Если вы просто используете целое число для последовательности, вы можете обновить идентификатор с помощью rownum. например,

update
table
set id = rownum

Затем необходимо сбросить последовательность до следующего действительного идентификатора.

2 голосов
/ 29 октября 2008

Это то, что вам нужно?

UPDATE your_table
   SET id = your_seq.nextval;

Предполагается, что вам все равно, в каком порядке находятся ваши первичные ключи.

0 голосов
/ 13 июля 2009

Сначала вы должны проверить PCTFREE ... достаточно ли места для каждого ряда, чтобы стать длиннее?

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

Вы почти наверняка лучше сделать это как CTAS.

Создайте таблицу t2 как выберите seq.nextval, t1. * Из t1.

падение t1

переименуйте t2 в t1.

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