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 ответов


Update person set id = rownum;

эта идея очень детская, но должна работать нормально, если ваша таблица не имеет большого количества строк.

на Шаге 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;