码迷,mamicode.com
首页 > 数据库 > 详细

oracle树形数据级联更新

时间:2020-05-10 22:53:24      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:opener   line   空值   process   nta   oop   ali   start   path   

oracle 同一张表 数据是树形结构
fid(主键) parentid(父ID) fpath(节点全路径)
1 1
2 1 1/2
3 1 1/3
4 2 1/2/4
但是现有数据是用excel导入的 fpath 是空值,现在想写条语句把 fpath全都加上,求语句

建表及数百据

1
2
3
4
5
6
7
8
9
10
11
create table test
(fid int,
parentid int,
fpath varchar2(100));
 
 
 
insert into test values (1,null,null);
insert into test values (2,1,null);
insert into test values (3,1,null);
insert into test values (4,2,null);

 

执行更度新版语句

1
2
3
4
5
6
7
8
update test a set a.fpath=
(select b.fpath from
(select fid,parentid,
       substr(sys_connect_by_path(fid,‘/‘),2) fpath
from   test
       start  with fid=1
       connect by prior fid=parentid) b
where a.fid=b.fid);

 

效果截图权

技术图片

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
CREATE TABLE temp (
  fid  int,
  parentid  int,
  fpath  varchar(20)
);
 
insert into temp (fid, parentid) values(1, null);
insert into temp (fid, parentid) values(2, 1);
insert into temp (fid, parentid) values(3, 1);
insert into temp (fid, parentid) values(4, 2);
 
 
 
update temp
set 
  fpath = (   
    SELECT fpath from
    (
      SELECT tt.fid,  TRIM(LEADING ‘/‘ FROM  SYS_CONNECT_BY_PATH(tt.fid, ‘/‘))  as fpath  from temp  tt
      START WITH tt.parentid is null
      CONNECT BY PRIOR tt.fid  =  tt.parentid
    ) t
    where t.fid = temp.fid
  );
   
   
 
已更新e68a84e8a2ad7a64313333326432354行。
 
SQL> select from temp;
 
       FID   PARENTID FPATH
---------- ---------- ----------------------------------------
         1            1
         2          1 1/2
         3          1 1/3
         4          2 1/2/4

oracle树形数据级联更新

标签:opener   line   空值   process   nta   oop   ali   start   path   

原文地址:https://www.cnblogs.com/xtjatswc/p/12865624.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!