将自动递增值分配给Oracle中的新列

时间:2008-10-28 15:43:08

标签: oracle plsql

我在Oracle DB中有这个表,它在3个数据列上定义了主键。我想删除主键约束以允许具有这些列的重复数据的行,并创建一个新列“id”,以包含这些行的自动递增整数ID。我知道如何创建一个序列并触发为添加到表中的新行添加自动递增ID,但是是否可以编写PL / SQL语句以向表中已有的所有行添加唯一ID?

4 个答案:

答案 0 :(得分:5)

创建序列后:

update mytable
set id = mysequence.nextval;

答案 1 :(得分:3)

如果您只是对序列使用整数,则可以使用rownum更新id。 e.g。

update
table
set id = rownum

然后,您需要将序列重置为下一个有效ID。

答案 2 :(得分:2)

这是你需要的吗?

UPDATE your_table
   SET id = your_seq.nextval;

这假设您不关心主键的顺序。

答案 3 :(得分:0)

首先你要检查你的PCTFREE ......是否有足够的空间让每一行都变得更长?

如果你选择了一个非常小的PCTFREE,或者你的数据有很多长度增加的更新,你可能会开始链接每一行来做这个更新。

作为CTAS,你几乎肯定会做得更好。

将表t2创建为选择seq.nextval,t1。*来自t1。

drop t1

将t2重命名为t1。

相关问题