如何手动将递增键列添加到现有表中

时间:2018-04-05 10:52:31

标签: sql oracle

我想将ID列添加到现有表中。我添加了新的id列。现在它包含所有空值。我希望用递增的唯一ID填充它。

现在我的表就像下面一样,

ID  |  col1 
------------
null   data1
null   data2
null   data3 

我想按照以下方式更新我的表格,

ID  |  col1 
------------
1    data1
2    data2
3    data3 

oracle SQL查询是做什么的?

3 个答案:

答案 0 :(得分:2)

一种方法使用merge

merge into t using 
      (select t.*, row_number() over (order by rowid) as seqnum
       from t
      ) s
      on (s.rowid = t.rowid)
when matched then update
    set id = seqnum;

Here是一个SQL小提琴。

答案 1 :(得分:2)

如果您希望将来为序列生成的该列分配唯一值,则创建序列并使用该序列更新现有列:

create sequence my_table_seq;
update my_table
  set id = my_table_seq.nextval;

这具有额外的好处,即序列自动与表中的最高值“同步”。

答案 2 :(得分:1)

您可以使用ROWNUM功能:

Oracle SQL ROWNUM函数返回一个数字,表示Oracle从表或连接表中选择行的顺序。第一行的ROWNUM为1,第二行的ROWNUM为2,依此类推。

UPDATE Table1 SET ID = ROWNUM;

现场演示

  

http://sqlfiddle.com/#!4/5af85/1