oracle树根据parent_id生成parent_ids

oracle 树形结构经常要通过parent_id生成parent_ids(当前节点路径)

//根据parent_id生成parent_ids            
update
set
  parent_ids = (   
    SELECT parent_ids from
    (
      SELECT tt.id,  TRIM(LEADING ',' FROM  SYS_CONNECT_BY_PATH(tt.id, ','))  as parent_ids  from SYS_OFFICE  tt
      START WITH tt.parent_id='0'
      CONNECT BY PRIOR tt.id  =  tt.parent_id
    ) t
    where t.id = sys_office.id
  );

 

在实际项目中数据量大时可能出现执行慢的情况,就分开处理,先生成一张中间表,再更新组织机构表。我在实际项目中遇到的情况是处理4w多条数据,不生成中间表执行了20分钟还没完成,于是停止执行,创建中间表,再更新,几分钟搞定。

//根据parent_id生成parent_ids,数据量大的时候创建中间表        
  create table t_test as( SELECT id,parent_ids from
    (
      SELECT tt.id,  TRIM(LEADING ',' FROM  SYS_CONNECT_BY_PATH(tt.id, ','))  as parent_ids  from SYS_OFFICE  tt
      START WITH tt.parent_id='0'
      CONNECT BY PRIOR tt.id  =  tt.parent_id
    ) t )

//更新组织表
    update sys_office o set o.parent_ids = (select t.parent_ids from t_test t where o.id=t.id)




转载于:https://www.cnblogs.com/coder-gqy/p/5849869.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值