部门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;
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-12 17:34:57