Oracle
Allen 2020-11-23 20:34:55 15928 2 0 0 0

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


【版權聲明】
本文爲原創,遵循CC 4.0 BY-SA版權協議!轉載時請附上原文鏈接及本聲明。
原文鏈接:https://tdlib.com/am.php?t=HFNDDJ3a6bYJ
Tag: oracle
我也要發一個   ·   返回首頁   ·   返回[Oracle]   ·   前一個   ·   下一個
評論
#1Visitor杜老师说 2020-11-24 14:56:50(N) 鏈接地址
你这个是博客?看起来好像轻论坛~
Allen#2Allen 2020-11-24 15:19:49(N) 鏈接地址
说真的,定位我也没有搞清楚。。。 这是自己作的,可以作为论坛,可以作博客吧!
頂部     1/1 
歡迎評論
未登錄,
請先 [ 註冊 ] or [ 登錄 ]
(一分鍾即可完成註冊!)
返回首頁     ·   返回[Oracle]   ·   返回頂部  
节点 : Oracle