Oracle 10g
我有一个包含复合键的表,我想用单数键替换它。所以我添加了一个id列。现在我需要一个更新语句来更新现有数据。
示例:
MyTable(NewID,CMP_Key1,CMP_Key2)
NULL,1,1
NULL,1,2
NULL,2,2
NULL,2,2
需要更新为:
1,1,1
2,1,2
3,2,2
4,2,2
到目前为止我尝试过:
Update MyTable SET NewID = (SELECT ROWNUM FROM DUAL);
哪个不起作用。这会将它们全部设置为1。
答案 0 :(得分:2)
你可以这样做:
update MyTable set NewId = rownum;
但是可能你想要为将来的插入增加NewId列,很可能是一个序列,也许是一个触发器。您需要以您手动设置的最高值(即运行更新时表中的行数)开始序列,因此您可以在此处使用序列:
create sequence MyTableSeq;
update MyTable set NewId = MyTableSeq.nextval;
两者都假设这是一个纯合成键,你不想强加任何排序。
答案 1 :(得分:0)
试试这个
merge into mytable t
using (select t.rowid rid, t.rownum id from mytable t) s
on (t.rowid = s.rid)
when matched then update set
t.newid= s.id;
commit;