oracle查询某人所在的部门(326)是否属于部门字符串(329|2)或者该部门字符串的子部门中

原创 2015年07月08日 16:11:18

 

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


 

版权声明:本文为博主牟云飞原创文章,未经博主允许不得转载。

2.oracle分页,找到员工表中薪水大于本部门平均薪水的员工

 ROWNUM的知识点 A ROWNUM按照oracle的默认机制生成。 B rownum只能使用  >= rownum的实现机制 rownum表...

oracle部门员工表查询

使用scott/tiger用户下的emp表和dept表完成下列练习,表的结构说明如下 emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal...

ORACLE 数据库的级联查询 一句sql搞定(例:部门多级,类型多级)

oracle中,有时候会遇到批量操作多级部门下的数据或者是多级类别下文档,一句sql搞定想要查询的数据,并对其增删改操作,如下: 查询某条数据下是否有子节点: select *          ...

oracle部门员工表关系查询

查询各个部门内员工个数 department:deptno dname employee:  deptno empno personnel select e.deptno,count(e.emp...
  • sprita1
  • sprita1
  • 2012年03月24日 19:09
  • 3158

oracle 部门层级查询

create table( CCID varchar2(20) not null, CCNAME V...

oracle查询员工人数最少的部门

--部门表 create table t_dept ( d_id number primary key , d_name varchar2(20) ); create sequence dept_...

oracle 根据部门求和排序

  • 2015年09月07日 23:17
  • 603B
  • 下载

oracle使用触发器进行用户部门同步

公司和另一个公司合作,将两个系统整合,整合时有个需求,为同库不同管理用户下的用户表进行同步,即A用户的用户表作为主维护表,在更新时,将用户信息同步到B用户的用户表中。 解决时,首先想到了触发器,在A...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle查询某人所在的部门(326)是否属于部门字符串(329|2)或者该部门字符串的子部门中
举报原因:
原因补充:

(最多只允许输入30个字)