程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle查詢某人所在的部門(326)是否屬於部門字符串(329|2)或者該部門字符串的子部門中

oracle查詢某人所在的部門(326)是否屬於部門字符串(329|2)或者該部門字符串的子部門中

編輯:Oracle教程

oracle查詢某人所在的部門(326)是否屬於部門字符串(329|2)或者該部門字符串的子部門中


 

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved