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;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牟云飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值