Как добавить автоинкремент в существующую таблицу в Oracle - PullRequest
1 голос
/ 13 января 2020

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

1 Ответ

1 голос
/ 13 января 2020

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

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


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

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>
...