1

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

4

4 回答 4

5

创建序列后:

update mytable
set id = mysequence.nextval;
于 2008-10-28T17:07:43.930 回答
3

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

update
table
set id = rownum

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

于 2008-10-28T16:00:24.583 回答
2

这是你需要的吗?

UPDATE your_table
   SET id = your_seq.nextval;

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

于 2008-10-28T22:22:04.763 回答
0

首先,您应该检查您的 PCTFREE ......是否有足够的空间让每一行变得更长?

如果您选择了一个非常小的 PCTFREE,或者您的数据有很多增加长度的更新,您可能会开始链接每一行以将其作为更新来执行。

作为 CTAS,你几乎肯定会更好地做到这一点。

创建表 t2 作为 select seq.nextval, t1.* from t1。

下降 t1

将 t2 重命名为 t1。

于 2009-07-13T17:36:32.217 回答