[英]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
列轉換為一個標識列 ,該列將 -
我該怎么做? 如果不可能,那么有沒有可用的解決辦法?
您不能將現有列轉換為真實標識列,但可以通過使用序列作為列的默認值來獲得類似的行為。
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.