Как я могу создать автоинкрементный столбец для моего существующего столбца? - PullRequest
0 голосов
/ 14 июня 2019

Я работаю с Oracle 12c, в котором у меня есть структура таблицы ниже: -

CREATE TABLE patients (
  patient_id Integer NOT NULL,
  customer_id Integer NOT NULL,
  title varchar(5) NOT NULL,
  fname varchar(125) NOT NULL,
  lname varchar(125) NOT NULL,
  dob date NOT NULL,
  is_medical_card NUMBER(1) NOT NULL CHECK (is_medical_card IN (0,1)),
  scheme_number Integer NOT NULL,
  status varchar(50) NOT NULL,
  created_on date NOT NULL,
  last_update_date date NOT NULL,
  consent_flag NUMBER(1) NOT NULL CHECK (consent_flag IN (0,1)),
  relationship varchar(50) NOT NULL
);

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

Спасибо!

Необходимо создать автоинкремент для существующего столбца.

1 Ответ

0 голосов
/ 20 июня 2019

Возможно, вы захотите использовать Identities - Создание таблицы с удостоверением дает вам возможность опустить значения ID и позволить Oracle использовать последовательность в нужном столбце:

1,Давайте создадим таблицу:

CREATE TABLE identities (
  id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
  description varchar2(100) NOT NULL
);

Таблица создана.

2.Вам потребуется создать первичный ключ для обеспечения уникальности:

alter table identities add constraint id_pk primary key (ID);

Таблица изменена.

3.Давайте вставим некоторые данные различными способами:

INSERT INTO identities (description)
VALUES('Insert Description omitting ID');

1 строка создана.

INSERT INTO identities (id,description)
VALUES(NULL,'Insert with explicit NULL value');

1 строка создана.

4.Сохранить выполненную работу

commit;

Фиксация завершена.

5.Проверьте результаты

select * from identities;

        ID DESCRIPTION
---------- ---------------------------------------------
         1 Insert Description omitting ID
         2 Insert with explicit NULL value

Как видите, мы не указали никакого числа для ID, но Identity в столбце ID для нас

Примечание: Имейте в виду, что вы можете вручную вставить ID, но это будет портить Identity, как это обычно происходит со стандартным Sequence:

INSERT INTO identities (id,description)
VALUES(3,'Manually insert an ID value');

1 row created.


INSERT INTO identities (description)
VALUES('Test Nextval');
INSERT INTO identities (description)
*
ERROR at line 1:
ORA-00001: unique constraint (XXX.ID_PK) violated

Эта ошибка, потому что он пытается вставить '3' в идентификатор, который был вставлен вручную с оператором ранее.

Проверьте таблицу:

select * from identities;

        ID DESCRIPTION
---------- ---------------------------------------------
         1 Insert Description omitting ID
         2 Insert with explicit NULL value
         3 Manually insert an ID value

Перезапустите вставку «NEXTVAL»:

INSERT INTO identities (description)
VALUES('Test Nextval');

1 строка создана.

Повторно проверьте таблицу:

select * from identities;

        ID DESCRIPTION
---------- ---------------------------------------------
         1 Insert Description omitting ID
         2 Insert with explicit NULL value
         3 Manually insert an ID value
         4 Test Nextval

Надеюсь, это поможет.

...