Czy istnieje jakieś sposoby dodania autoryzacji do klucza podstawowego w już istniejącej tabeli w Oracle 12c. Może być z funkcją alter tabeli lub smth, mam na myśli bez wyzwalaczy i sekwencji.

1
Ytug Ilya 13 styczeń 2020, 10:52

1 odpowiedź

Najlepsza odpowiedź

O ile mogę powiedzieć, możesz nie "modyfikować" istniejącą kolumnę główną klucz do "rzeczywistej" kolumny tożsamości.

Jeśli chcesz to zrobić, będziesz musiał upuścić bieżącą kolumnę klucza podstawowego, a następnie zmienić tabelę i dodać nową kolumnę tożsamość .


Obejście jest użycie sekwencji (lub spustu), ale - powiedziałeś, że nie chcesz tego robić. W każdym razie, jeśli zdecydujesz się go użyć:

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>

Lub, z upuszczającym górną kolumną kluczową podstawową (zauważ, że nie działa łatwe, jeśli zaangażowane są klucze obce):

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>
1
Littlefoot 13 styczeń 2020, 08:26