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