Как добавить автоинкремент в существующую таблицу в Oracle

Есть ли способы добавить автоинкремент к первичному ключу в уже существующей таблице в Oracle 12c. Может быть с функцией ALTER TABLE или что-то, я имею в виду без триггеров и последовательностей.

Всего 1 ответ


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

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


Обходной путь - использовать последовательность (или триггер), но - вы сказали, что не хотите этого делать. В любом случае, если вы решите использовать его:

SQL> create table test
  2   (id   number constraint pk_test primary key,
  3    name varchar2(10));

Table created.

SQL> insert into test values (1, 'LF');

1 row created.

SQL> create sequence seq_test start with 2;

Sequence created.

SQL> alter table test modify id default seq_test.nextval;

Table altered.

SQL> insert into test (name) values ('BF');

1 row created.

SQL> select * from test;

        ID NAME
---------- ----------
         1 LF
         2 BF

SQL>

Или с удалением текущего столбца первичного ключа (обратите внимание, что это не будет работать легко, если задействованы внешние ключи):

SQL> alter table test drop column id;

Table altered.

SQL> alter table test add id number generated always as identity;

Table altered.

SQL> select * From test;

NAME               ID
---------- ----------
LF                  1
BF                  2

SQL> insert into test (name) values ('test');

1 row created.

SQL> select * From test;

NAME               ID
---------- ----------
LF                  1
BF                  2
test                3

SQL>

Есть идеи?

10000