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;


 

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

oracle 递归查询属于本部门以及下属部门

oracle使用递归查询要使用 connect by语句 下面给出一个实例: select PUBCB_id,PUBCB001,PUBCB002 from TB_PUBCB start with...
  • u012251421
  • u012251421
  • 2015年01月05日 15:21
  • 491

Oracle start with用法实例之根据当前部门id递归查询该部门及子部门信息实例

1.实体bean(对应数据库表sys_dept结构为:dept_id、parent_id…)public class Dept{ private String deptId; ...
  • FANTASY522272820
  • FANTASY522272820
  • 2017年08月31日 11:01
  • 153

递归查询所有部门,并按部门等级打印

实体:package demo; /** * *@author: *@CreateTime: *@ModifiedDate: *@ModifiedBy: *@Version: */ public cl...
  • weixin_41155095
  • weixin_41155095
  • 2017年11月30日 14:21
  • 78

oracle查询练习2

1 显示所有雇员名、雇员工资及所在部门名 --select ename 雇员名,sal 雇员工资,dname 部门名 from emp,dept where emp.deptno=dept.deptn...
  • linklin1995
  • linklin1995
  • 2016年04月29日 12:00
  • 1309

12-hibernate实战 多对一根据查询员工获取部门的信息

static Employee query(int empId) { Session session = null; Transaction transaction = null; try...
  • u010653050
  • u010653050
  • 2014年02月24日 20:46
  • 1044

MySql数据库查询多级部门及其下的所有用户信息

关于多级别菜单栏或者权限系统中部门上下级的树形遍历,oracle中有connect by来实现,  mysql没有这样的便捷途径,所以MySQL遍历数据表是我们经常会遇到的头痛问题,下面通过数据库寒素...
  • Calvex880714
  • Calvex880714
  • 2016年05月09日 12:33
  • 3343

Oracle查询各个部门工资小于各个部门平均工资的员工

时时想着 SELECT A.* FROM emp A, ( SELECT deptno, AVG(sal) t --部门平均工资 FROM emp ...
  • ItJavawfc
  • ItJavawfc
  • 2014年07月12日 10:12
  • 2228

Oracle 数据库基础练习②

使用oracle专用语法中的decode()函数,职位是分析员的,工资+1000;职位是经理的,工资+800;职位是其它的,工资+400 decode(字段,条件1,表达式1,条件2,表达式2,…表...
  • chenfengbao
  • chenfengbao
  • 2017年05月18日 22:20
  • 385

Hibernate 员工和部门

FR:海涛高软(hunk Xu)
  • qq_15267341
  • qq_15267341
  • 2017年08月28日 08:45
  • 130

找出那些工资高于他们所在部门的平均工资的员工

http://www.cnblogs.com/zhangzhu/archive/2012/05/10/2494978.html 一个SQL实现薪水大于所在部门平均薪水的员工 ...
  • haluoluo211
  • haluoluo211
  • 2015年03月23日 10:27
  • 2588
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle查询某人所在的部门(326)是否属于部门字符串(329|2)或者该部门字符串的子部门中
举报原因:
原因补充:

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