员工部门全路径


员工部门全路径
 需要:一张表为员工表,一张表为部门表,然后获取每位员工的部门全路径
create or replace  procedure bumenfullpath
   is 
  v_c_code             tb_v_pekemp.c_code%type;
  v_c_name_emp        tb_v_pekemp.c_name%type;
  v_c_dept_hid           tb_v_pekemp.c_dept_hid%type;
  v_c_name            tb_v_pekunit.c_name%type;
cursor c_emp  is select c_code,c_name,c_dept_hid from tb_v_pekemp order by c_code;
 begin
for i in  c_emp
loop
v_c_code:=i.c_code;
 v_c_dept_hid:=i.c_dept_hid;
 v_c_name_emp :=i.c_name;
--爬树,通过sys_connect_by_path函数来获取每位员工部门全路径;另外,又用了子查询,返回内容最长的哪行记录
select c_name into v_c_name
 from

(select *
from 
(
select c_name_max, c_name  from 
(
select max(length(c_name)) c_name_max, c_name 
from
(select c_oid,sys_connect_by_path(c_name,'/') c_name
from tb_v_pekunit
start with  c_oid=v_c_dept_hid
connect by prior c_supoid=c_oid) group by c_name 
) order by c_name_max desc
 )
where rownum=1);
 dbms_output.put_line(v_c_code||'==>'||v_c_name_emp||':'||v_c_name);
end loop;
  end;
 /


验证过程:
SQL> exec bumenfullpath;
0001==>陈x:/总裁办/职能部室/宏远控股集团有限公司
0002==>齐x:/总经理室/进口事业部/事业部、分子公司/宏远控股集团有限公司
0005==>赵xx:/总经理室/地产事业部/事业部、分子公司/宏远控股集团有限公司

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28916011/viewspace-2120172/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28916011/viewspace-2120172/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 MySQL 中的递归查询来实现此功能。以下是一个可能的查询: ```sql WITH RECURSIVE dept_tree AS ( SELECT unique_code, parent_code, relation_codes FROM department WHERE unique_code = 'your_department_code' UNION ALL SELECT d.unique_code, d.parent_code, d.relation_codes FROM department d JOIN dept_tree dt ON d.parent_code = dt.unique_code ) SELECT e.* FROM employee e JOIN dept_tree dt ON dt.relation_codes LIKE CONCAT('%/', e.department_code, '/%') ``` 在上面的查询中,我们使用了一种称为“递归公共表表达式”的技术。首先,我们从部门表中选择指定部门的记录,并将其添加到结果集中。然后,我们递归地连接每个父级部门的记录,直到到达根部门为止。这样,我们就可以构建出一个包含指定部门及其子部门的记录集合,其中每个记录都包含了它们的关系路径(即 relation_codes 字段)。 接下来,我们将员工表与这个记录集合连接,使用 LIKE 运算符来查找属于这些部门之一的员工。由于 relation_codes 中包含了父级部门和子部门的代码,我们需要使用 CONCAT 函数将员工部门代码拼接成一个类似于“/dept_code/”的字符串,并用通配符“%”匹配。这样,我们就可以找到所有属于指定部门及其子部门员工了。 请注意,这个查询可能会比较耗时,特别是在部门员工数量很大的情况下。因此,你可能需要对表结构和索引进行优化,以提高查询性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值