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;  returnoracle账号 '0';end;

 

此条目发表在oracle metalink账号分类目录,贴了标签。将固定链接加入收藏夹。