mysql树查询及分层级

这里写图片描述
drop procedure proc_fi_deptment;
DELIMITER //
create PROCEDURE proc_fi_deptment()
BEGIN
/* 标记是否出错 /
declare t_error int default 0;
/* 标记是否跳出循环 /
DECLARE flag int default 1;
#层级
DECLARE cj int default 0;
#下层级
DECLARE cjnext int default 0;
#个数
DECLARE sl int default 0;

/** 如果出现sql异常,则将t_error设置为1后继续执行后面的操作 */  
declare continue handler for sqlexception set t_error=1; # 出错处理

# 开始事务
START TRANSACTION;

这里写图片描述
#创建未分层级的临时表
delete from ofs_fi_department_temporary ;
insert into ofs_fi_department_temporary
SELECT A.KOKRS,
B.SPRAS,
A.PRCTR DEPT_CODE,
B.KTEXT DEPT_NAME,
A.ZWDLXBM DEPT_TYPE_CODE,
B.ZWDLXMC DEPT_TYPE_NAME,
A.ZZHPRCTR PARENT_DEPT_CODE,
A.DATAB,
A.DATBI,
A.LOCK_IND LOCK_IND,
A.DELFG,
A.LASTUPDATE,
null
FROM sap_fi_network A
LEFT JOIN sap_fi_network_children B
ON A.KOKRS = B.KOKRS
AND A.PRCTR = B.PRCTR
AND A.DATBI = B.DATBI
WHERE A.DELFG IS NULL
AND SYSDATE() BETWEEN A.DATAB AND A.DATBI ;

update ofs_fi_department_temporary ofd set ofd.`level` = 0,ofd.PARENT_DEPT_CODE = null
where ofd.DEPT_CODE = '001';

create or replace table ofs_fi_department 
as 
select * from ofs_fi_department_temporary where DEPT_CODE= '001';

ALTER TABLE `ofs_fi_department`
ADD INDEX `DEPT_CODE` (`DEPT_CODE`),
ADD INDEX `PARENT_DEPT_CODE` (`PARENT_DEPT_CODE`),
ADD INDEX `level` (`level`);

while flag = 1 do
    select count(ofd1.DEPT_CODE) into sl from ofs_fi_department ofd1 where ofd1.`level`=cj ;
    if sl > 0 then
       set cjnext = cj+1;
       insert into ofs_fi_department 
       select * from ofs_fi_department_temporary ofd2 where ofd2.PARENT_DEPT_CODE in (select ofd3.DEPT_CODE from ofs_fi_department ofd3 where ofd3.`level` = cj);
        update ofs_fi_department ofd4 set ofd4.`level` = cjnext where ofd4.`level` is null;
       commit;
        set cj = cj+1;
    else 
        set flag =0;
    end if;

end while; 

if t_error=1 then  
   rollback; -- 事务回滚  
else  
    commit; -- 事务提交  
end if;  

END ;
//
DELIMITER ;

call proc_fi_deptment();

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值