Как добавить уникальный идентификатор столбца в таблицу? - PullRequest
0 голосов
/ 06 марта 2019

У меня есть таблица, в которой нет уникального идентификатора. Я хочу добавить уникальный столбец в таблицу, как мне этого добиться?

Мой стол выглядит так:

name age     gender      marital_status
SAM          M           Single
BOB          M           Married
JEN          F           Single
BOB          M           Married

Я хочу, чтобы мой стол был таким:

id      name age     gender      marital_status
1        SAM          M           Single
2        BOB          M           Married
3        JEN          F           Single
4        BOB          M           Married

Причина, по которой я хочу иметь уникальный идентификатор, заключается в том, что некоторые записи дублируют друг друга, и я хочу удалить дубликаты.

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Вы можете сделать следующее:

alter table t add id int;

create sequence t_seq;

update t set id = t_seq.nextval;

alter table t modify id primary key;

К сожалению, я не думаю, что Oracle позволяет поместить столбец в начало списка столбцов.Он всегда добавляется в конец.

0 голосов
/ 07 марта 2019

Демонстрационная таблица:

create table people (name, gender, marital_status)
as
select 'SAM', 'M', 'Single' from dual union all
select 'BOB', 'M', 'Married' from dual union all
select 'JEN', 'F', 'Single' from dual union all
select 'BOB', 'M', 'Married' from dual;

Добавьте столбец идентификаторов (требуется Oracle 12.1 или новее):

alter table people add id integer generated always as identity;

Если вы хотите, измените порядок словаря так, чтобы новый столбецпоявляется первым при описании таблицы (также требуется Oracle 12.1):

begin
    for r in (
        select column_name from user_tab_columns c
        where  c.table_name = 'PEOPLE'
        and    c.column_name <> 'ID'
        order by c.column_id
    )
    loop
        execute immediate 'alter table people modify ' || r.column_name || ' invisible';
        execute immediate 'alter table people modify ' || r.column_name || ' visible';
    end loop;
end;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...