oracle添加自增序列/表中已有数据增加序号/更新序号
--创建表和数据
create table system.tt (fid number(12),name varchar2(10)) tablespace sydat01;
insert into system.tt (name) values (|aa|);
insert into system.tt (name) values (|bb|);
--查看数据
select * from tt;
--创建序列
create sequence fid_tt
minvalue 10000000
maxvalue 99999999
start with 10000001
increment by 1
nocycle
nocache;
--创建触发器
create or replace trigger tt_fid
before insert on system.tt
for each row
begin
select fid_tt.nextval into :new.fid from dual;
end tt_fid;
--更新已有数据的序列
update system.tt set fid=rownum;
--查看数据
select * from tt;
--再写入数据
insert into system.tt (name) values (|cc|);
insert into system.tt (name) values (|dd|);
--查看数据
select * from tt;
+++
如何给表中的已有数据增加序号/更新序号
原来很简单:update system.tt set fid=rownum;
还了解了以下:
简单了解一下rownum
rownum是oracle对结果集返回的一个伪列,也就是说在查询完结果之后加上的一个虚列,相当于对符合条件的结果的一个序列号。如果有结果的话,rownum伪列产生的序号是按照数据被查询出来的顺序添加上去的, rownum总是从1开始,依次加1
将表tableName中的rownum值赋值给表tableName中的sort列
PS:tableName可以是相同的表也可以是不同的表
UPDATE tableName A SET A.SORT = (
SELECT b.num from(
SELECT id,ROWNUM as num FROM tableName
) b WHERE A . ID = b. ID
)
从SQL语句中可以看出ROWNUM是 先查询之后再使用的,这也对应了ROWNUM的特性
+++
在oracle里面的序号一般使用row_number() over(ORDER BY 列名) 分析函数
语法格式:row_number() over(partition by 分组列 order by 排序列 desc);
select row_number() over(order by t.id) rowno,t.* from tt;
sql语句:
UPDATE tt a SET a.SYS_CODE=(SELECT b.rowno FROM (SELECT row_number() over(ORDER BY t.id) rowno, ROWID browid from tt t ) b WHERE b.browid = a.rowid)
end
Tag: oracle