当前位置:Gxlcms > 数据库问题 > oracle查询某人所在的部门(326)是否属于部门字符串(329|2)或者该部门字符串的子部门中

oracle查询某人所在的部门(326)是否属于部门字符串(329|2)或者该部门字符串的子部门中

时间:2021-07-01 10:21:17 帮助过:3人阅读

 

部门326为部门329的父部门,部门2与部门326是同级部门;

账户muyunfei,属于329部门

消息发送给部门2及部门326两个部门(326|2),发送的部门对象之间用“|”分割

技术分享

 

 

查询:muyunfei账户是否属于该部门字符串(329|2)或者该部门字符串的子部门中

1、首先使用start with。。。。。connect by获得账户muyunfei的部门及父部门

2、遍历部门及父部门,在循环体重嵌套循环(该循环拆分以“|”为分隔符的部门号),在嵌套的循环体中判断,两结果是否相同,相同,即人属于当前部门或其子部门,返回1结束循环,否则继续循环

create or replace function check_User_in_dept(to_party_id varchar2, --部门id,多个用|分割
                                              cur_user_id varchar2 --人员id
                                              ) return varchar2 as
  /*
  功能:判断当前人是是否属于当前部门中
  * 1当前人属于该部门,0不属于
  */
  party_str varchar2(200);
  v_length  NUMBER := LENGTH(to_party_id);
  v_start   NUMBER := 1;
  v_index   NUMBER;

  cursor c_1 is
    select *
      from wx_party a
     start with a.party_id = (select b.department
                                from wx_contacts b
                               where b.user_id = cur_user_id)
    connect by a.party_id = prior a.parent_id;

begin
  /*检索游标数据*/
  for v_1 in c_1 loop
    /**根据‘|’拆分字符串,并匹配数据,如果存在然后1,否则继续循环*/
    WHILE (v_start <= v_length) LOOP
      v_index := INSTR(to_party_id, '|', v_start);
       -- DBMS_OUTPUT.PUT_LINE('v_index:' || v_index);
      IF v_index = 0 THEN
        party_str := SUBSTR(to_party_id, v_start);
        v_start   := v_length + 1;
      ELSE
        party_str := SUBSTR(to_party_id, v_start, v_index - v_start);
        v_start   := v_index + 1;
      END IF;
      --DBMS_OUTPUT.PUT_LINE('party_str:' || party_str);
      --DBMS_OUTPUT.PUT_LINE('party_id:' || v_1.party_id);
      IF party_str = v_1.party_id then
        return '1';
      end if;
    END LOOP;
    /*重置循环条件*/
    v_length := LENGTH(to_party_id);
    v_start  := 1;
  end loop;
  return '0';
end;


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

oracle查询某人所在的部门(326)是否属于部门字符串(329|2)或者该部门字符串的子部门中

标签:

人气教程排行