我有一个表,其中包含一个主键列,该列可从应用程序自动递增。如何在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
值(这与您可以找到的identity列非常接近)如果要使用真实身份列,则需要删除当前的
id
列,然后将其重新添加为身份列:alter table tmp_identity drop column id;
alter table tmp_identity
add id number(38)
generated always as identity;
请注意,在这种情况下,您不应该添加
start with 4
,以便所有行都获得一个新的唯一编号关于sql - Oracle 12c : How can I modify an existing primary key column to an identity column?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32976743/