我有一个Oracle表是这样的:如何重新排序Oracle表ID
fruit id
-------- -----
apple 1
plum 9
pear 55
orange 104
..
id列数字是错误的。我如何更新每行重新排序的ID如下:
fruit id
-------- -----
apple 1
plum 2
pear 3
orange 4
什么是最有效的方法来做到这一点?
我有一个Oracle表是这样的:如何重新排序Oracle表ID
fruit id
-------- -----
apple 1
plum 9
pear 55
orange 104
..
id列数字是错误的。我如何更新每行重新排序的ID如下:
fruit id
-------- -----
apple 1
plum 2
pear 3
orange 4
什么是最有效的方法来做到这一点?
update your_table
set id = rownum
先按ID排序。如果存在一个独特的约束,并且以某种方式进一步在行的下方有一个id = 2的水果,这将会中断。 – 2013-04-08 16:14:01
@JoeFrambach - 你想在哪里插入'order by'?请写下您的完整查询。 – 2013-04-08 16:25:06
@JoeFrambach - 不,它不会是一个原子操作,在这个操作的最后,仍然只有一行ID 2。它将以随机(ish)顺序分配新ID,但是不清楚事项。 – 2013-04-08 16:25:25
如果你需要保证旧秩序,下面应该这样做:
merge into the_table
using
(
select rowid as rid,
row_number() over (order by id asc) as new_id
from the_table
) t on (t.rid = the_table.rowid)
when matched then
update set id = new_id;
DECLARE
i INTEGER :=1;
BEGIN;
FOR n IN (SELECT your_primary_id FROM your_table_name ORDER BY your_primary_id);
LOOP;
UPDATE your_table_name
SET your_primary_id=i
WHERE your_primary_id = n.your_primary_id;
i := i + 1;
END LOOP;
END;
/
http://stackoverflow.com/questions/11296361/how-to-create-id -with-auto-increment-on-oracle – 2013-04-08 16:06:55
嗨,我不想删除表并重新创建它。我只是想要一个正常的循环来重置/增加 – user648244 2013-04-08 16:07:40
使程序以升序获取数据并更新每个值。或者如果它是自动增量,请参阅http://stackoverflow.com/questions/5593623/reset-pk-auto-increment-column – commit 2013-04-08 16:14:50