Oracle SQL-добавление первичного ключа в таблицу
у меня есть несколько столбцов без первичного ключа и хочу добавить столбец первичного ключа.
NAME Age
-------------
Peter 45
Bob 25
John 56
Peter 45
некоторые коллеги предлагают добавить ПК с последовательностями и триггерами: добавьте первичный ключ автоматического приращения к существующей таблице в oracle
это хорошо, но мои клиенты используют пользователя базы данных без прав на добавление последовательностей или триггеров. Я хочу предотвратить контакты с десятками Администраторы DBA для изменения прав пользователя или запуска моих сценариев.
это мое предложение добавить ПК только с заявлением об обновлении: (мне нужна помощь на Шаге 2)
Шаг 1: создайте столбец ID (у меня есть права DB для этого)
ALTER TABLE PERSON ADD ID NUMBER(10,0);
Шаг 2: вопрос: Могу ли я инициализировать столбец ID уникальными значениями на основе порядка строк или чего-то еще? Как?
UPDATE PERSON SET ID = something-unique
Шаг 3: добавить основной ключ contraint послесловия: (у меня БД есть права на это)
ALTER TABLE PERSON ADD CONSTRAINT PK_ID PRIMARY KEY(ID);
Шаг 4: Afterwords: первичный ключ управляется и добавляется моим приложением.
это будет результат:
ID(PK) NAME Age
---------------------
1 Peter 45
2 Bob 25
3 John 56
4 Peter 45
Спасибо ребята!
2 ответов
эта идея очень детская, но должна работать нормально, если ваша таблица не имеет большого количества строк.
на Шаге 2, Выполните на петли, как:
declare
i pls_integer :=1;
begin
for rec in (select name,age, rowid from table_name)
loop
update table_name set id = i
where
table_name.name=rec.name
and table_name.age=rec.age
and table_name.rowid = rec.rowid;
i:=i+1;
end loop;
end;