部門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;