首页 > 解决方案 > 更新表中新列中的序列号

问题描述

输入

create table myprojects ( startdate date, enddate date, profit  number);        
insert into myprojects (startdate, enddate,profit ) values(to_date('1/5/2019','mm/dd/yyyy'),to_date('5/1/2019','mm/dd/yyyy'),100);        
insert into myprojects (startdate, enddate,profit ) values(to_date('1/6/2019','mm/dd/yyyy'),to_date('2/10/2019','mm/dd/yyyy'),50);   
alter table myprojects add ( projectid number ); 

现在,我在此表中添加了新列。如何为每一行填充该列的值,如 1,2?

使用下面的语句,它工作正常。

CREATE SEQUENCE myseq  START WITH 1   INCREMENT BY 1   CACHE 20 
/
update myprojects set projectid=myseq.nextval

问题

  1. 但是,使用下面的语句它只是更新 1 到所有记录。为什么?

    update myprojects set projectid=(select nvl(max(projectid),0) +1  from myprojects)
    
  2. 有没有办法在不创建或使用序列的情况下实现相同的目标?

标签: sqloraclesql-updateoracle12c

解决方案


如果您使用的是 Oracle 12c 及更高版本,并且您对标识列感到满意,那么您可以使用以下 alter table 命令,oracle 将为您生成数字。

alter table myprojects add ( projectid number generated always as identity);

db<>小提琴演示

Identity column在您的实际项目中使用它之前,请阅读Oracle 文档。

干杯!!


推荐阅读