sql - 更新表中新列中的序列号
问题描述
输入
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 到所有记录。为什么?
update myprojects set projectid=(select nvl(max(projectid),0) +1 from myprojects)
有没有办法在不创建或使用序列的情况下实现相同的目标?
解决方案
如果您使用的是 Oracle 12c 及更高版本,并且您对标识列感到满意,那么您可以使用以下 alter table 命令,oracle 将为您生成数字。
alter table myprojects add ( projectid number generated always as identity);
Identity column
在您的实际项目中使用它之前,请阅读Oracle 文档。
干杯!!
推荐阅读
- wso2 - WS2 SP 4.4-HA 故障转移问题
- r - 如何用 4 组绘制 geom_line 以及如何在没有数据的情况下限制 x 轴
- javascript - 删除 Select2 必填字段动态
- macos - 在 mac 上阻止应用程序
- python - 将平面文件上传到 Azure 存储帐户
- excel - 如何在运行时找到 excel 使用的 .net 框架
- laravel - 如何使用 Axios post 从 vue 中保存 ID
- installation - 安装 navidrome 抛出“单元 navidrome.service 未正确加载:执行格式错误。”
- r - 有条件地从长期数据中删除个人
- python - 使用python和pandas在不同的子目录中合并多个同名的csv文件