簡體   English   中英

Oracle 12c:如何將現有主鍵列修改為標識列?

[英]Oracle 12c: How can I modify an existing primary key column to an identity column?

我有一個表,其中包含一個主鍵列,該列從應用程序自動遞增。 如何將列修改為Oracle 12c中的標識列

以下提供樣本案例 -

create table tmp_identity (
   id number(100) primary key,
   value varchar2(100)
);

假設我們使用以下數據填充表格 -

ID        VALUE
---------------
1         Sample 1
2         Sample 2
3         Sample 3

我們計划做的是將此id列轉換為一個標識列 ,該將 -

  • 自動遞增1
  • 從4開始

我該怎么做? 如果不可能,那么有沒有可用的解決辦法?

您不能將現有列轉換為真實標識列,但可以通過使用序列作為列的默認值來獲得類似的行為。

create sequence seq_tmp_identity_id
  start with 4
  increment by 1;

然后使用:

alter table tmp_identity 
   modify id 
   default seq_tmp_identity_id.nextval;

使列使用序列作為默認值。 如果需要,可以使用default on null來覆蓋插入期間提供的顯式null值(這與您可以訪問標識列一樣接近)

如果需要真實標識列,則需要刪除當前id列,然后將其重新添加為標識列:

alter table tmp_identity drop column id;

alter table tmp_identity 
     add id number(38) 
     generated always as identity;

請注意,在這種情況下,不應將start with 4添加為start with 4 ,以便所有行都獲得一個新的唯一編號

您可以使用以下查詢將列從id重命名為identity

ALTER TABLE tmp_identity
RENAME COLUMN id TO identity; 

要自動遞增1並從4開始,我們可以使用序列。

CREATE SEQUENCE identity_incre
MINVALUE 4
START WITH 4
INCREMENT BY 1;

在查詢中使用identity_incre序列

INSERT INTO suppliers
(identity, VALUE)
VALUES
(identity_incre.NEXTVAL, 'sample4');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM