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