为Oracle中的新列指定自动递增值
我在Oracle数据库中有一个表,其中有3个数据列上定义了一个主键。我想删除主键约束以允许这些列具有重复数据的行,并创建一个新列“id”,以包含这些行的自动递增整数id。我知道如何创建一个序列和触发器来为添加到表中的新行添加一个自动递增的ID,但是是否可以编写一个PL/SQL语句来为表中已经存在的所有行添加唯一ID?如果只是对序列使用一个整数,则可以使用rownum更新ID。e、 g为Oracle中的新列指定自动递增值,oracle,plsql,Oracle,Plsql,我在Oracle数据库中有一个表,其中有3个数据列上定义了一个主键。我想删除主键约束以允许这些列具有重复数据的行,并创建一个新列“id”,以包含这些行的自动递增整数id。我知道如何创建一个序列和触发器来为添加到表中的新行添加一个自动递增的ID,但是是否可以编写一个PL/SQL语句来为表中已经存在的所有行添加唯一ID?如果只是对序列使用一个整数,则可以使用rownum更新ID。e、 g update table set id = rownum 然后需要将序列重置为下一个有效id。如果只是对序列使
update
table
set id = rownum
然后需要将序列重置为下一个有效id。如果只是对序列使用整数,则可以使用rownum更新该id。e、 g
update
table
set id = rownum
然后,您需要将序列重置为下一个有效id。创建序列后:
update mytable
set id = mysequence.nextval;
创建序列后:
update mytable
set id = mysequence.nextval;
这是你需要的吗
UPDATE your_table
SET id = your_seq.nextval;
这假设您不关心主键的顺序。这就是您需要的吗
UPDATE your_table
SET id = your_seq.nextval;
这假设您不关心主键的顺序。首先您应该检查您的PCTFREE。。。是否有足够的空间让每一排都变得更长 如果您选择了一个非常小的PCTFREE,或者您的数据有很多长度增加的更新,那么您可能会开始将每一行链接起来,以作为一个更新 几乎可以肯定,作为CTA,您最好这样做 创建表t2,从t1中选择seq.nextval、t1.*作为表 下降t1
将t2重命名为t1。首先,您应该检查您的PCTFREE。。。是否有足够的空间让每一排都变得更长 如果您选择了一个非常小的PCTFREE,或者您的数据有很多长度增加的更新,那么您可能会开始将每一行链接起来,以作为一个更新 几乎可以肯定,作为CTA,您最好这样做 创建表t2,从t1中选择seq.nextval、t1.*作为表 下降t1 将t2重命名为t1