oracle树形数据级联更新

Posted 键盘侠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle树形数据级联更新相关的知识,希望对你有一定的参考价值。

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树形数据级联更新的主要内容,如果未能解决你的问题,请参考以下文章

使用postgre数据库实现树形结构表的子-父级迭代查询,通过级联菜单简单举例

数据库中啥是“级联更新关联字段”和“级联删除关联字段”

级联数据生成树形结构

JS数组递归——构建 element 级联选择器树形数据

Element-Ui级联选择器递归显示某一级树形结构数据

Element-Ui级联选择器递归显示某一级树形结构数据