设为首页 加入收藏

TOP

oracle查询某人所在的部门(326)是否属于部门字符串(329|2)或者该部门字符串的子部门中
2015-11-21 01:56:11 来源: 作者: 【 】 浏览:0
Tags:oracle 查询 某人 所在 部门 326 是否 属于 字符串 329 或者

?

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

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle442个应用场景------------.. 下一篇Oracle备份工具、文件命名格式、r..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: