前几天在开发的过程中遇到一个递归查询的问题,java代码大致是这样的:

      // 递归得到四级机构对象
public UserManagerDept getuserManagerDeptBy(String deptId)
{ UserManagerDept userManagerDept = null; userManagerDept = userManagerDeptService.getUserManagerDeptEntityBydeptId(deptId);
if (null == userManagerDept)
{
return null;
} if (!StringUtils.isNullOrEmpty(userManagerDept.getParentId()))
{
logger.info("***getParentId****" + userManagerDept.getParentId());
return getuserManagerDeptBy(userManagerDept.getParentId()); } else
{
return userManagerDept;
} return null; }

  逻辑是不是十分简单,但是一执行就死循环,并且一直循环到内存溢出,系统崩溃为止,有个同事一直在怀疑是不是内存太小了,但是我认为是不可能的,因为我们的运行服务器挺大的(2g), 实在找不到问题在哪,后来就换了种方式来实现递归, 那就是修改sql,将普通的sql查询语句,换成递归查询,下面上代码:

select t.* from (
select t.* from t_dept t start with t.dept_id = '1041001210001'
connect by prior t.parent_id = t.dept_id) t
where t.parent_id is null;

  注意代码中高亮显示的内容,通过.....start with ...connect by prior...来实现递归查询,是不是看不太懂,再详细一点好了,

一,基本语法
SELECT ... FROM
(

SELECT ... FROM    + 表名 
START WITH         + 条件1
CONNECT BY PRIOR   + 条件2

)
WHERE              + 条件3

二,应用场景

START WITH... CONNECT BY PRIOR...常见的用法,是用来遍历含有父子关系的表结构中。比如省市关系,一个省
下面包含多个城市,如果城市基本信息表中,包含有属于哪个省级的字段,那么如果要遍历所有的城市,我们就可以
使用START WITH... CONNECT BY PRIOR...。

如果该内容对您有所帮助,请打赏----1毛就足够感动我

Oracle实现递归查询的更多相关文章

  1. sqlserver和oracle的递归查询

    1.sqlserver递归查询方式 CTE: if OBJECT_ID('tb','N') is not null   drop table tb;     create table tb(id va ...

  2. Oracle 的递归查询将层级变成字符串

    select A.PARENT_GROUP_ID, A.GROUP_ID,sys_connect_by_path(A.GROUP_ID,'/') || '/' path from dam_dataen ...

  3. Oracle 递归查询

    现实中我们经常需要用到一些递归查询,下面我们来介绍下ORACLE中递归查询的使用. 首先我们先新建一个表来存储以上信息 create table FAMILY ( person_id INTEGER, ...

  4. 你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗

    ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性:    Oracle.MYSQL与DB2可在所有主流平台上运行:    SQL Server只能在Windows下运行: --安 ...

  5. Oracle约束(Constraint)详解

    概述 约束是数据库用来确保数据满足业务规则的手段,不过在真正的企业开发中,除了主键约束这类具有强需求的约束,像外键约束,检查约束更多时候仅仅出现在数据库设计阶段,真实环境却很少应用,更多是放到程序逻辑 ...

  6. Oracle和Mysql语法异同整理笔记

    目录 (1) 模糊匹配 (2) 删除数据 (3) 时间函数 (4) 关键字问题 (5) 递归查询 (6) 排序问题 (7) 空值返回0 (8) 取最大值 (9) 列转换函数 (10) 类型转行函数 @ ...

  7. Mysql实现树形递归查询

    最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的函数,mysql并没有,所以就只好想自定义函数或者找到替换函数的方法进行改造. Oracle递归查询 oracle实现递归 ...

  8. 利用Oracle分析函数row_number和sys_connect_by_path实现多行数据合并为一行

    emo场景,以oracle自带库中的表emp为例: select ename,deptno from emp order by deptno; ENAME DEPTNO CLARK 10 KING 1 ...

  9. oracle小知识点

    一 . procedure和function: procedure和function在语法上几乎完全一样,使用上却有小小的差别, procedure可以单独的调用 在命令行直接exec pro_xxx ...

随机推荐

  1. 关于Integer的比较,今天又犯了一个低级错误,记录下

    今天查看以前所写的代码,看到有一部分被人改了,代码如下: if (orgId != organizationUpdateReq.getOrgId()) { //orgId的类型为Integer,org ...

  2. HTML CSS + DIV实现整体布局 part2

    9.盒模型的层次关系 我们通过一个经典的盒模型3D立体结构图来理解,如图:     从上往下看,层次关系如下: 第1层:盒子的边框(border),     第2层:元素的内容(content).内边 ...

  3. 30分钟新手git教程

    本文转载自:http://igeekbar.com/igeekbar/post/82.htm Git近些年的火爆程度非同一般,这个版本控制系统被广泛地用在大型开源项目(比如Linux),不同规模的团队 ...

  4. Hibernate 中 联合主键映射 组合关系映射 大对象映射(或者说文本大对象,二进制数据大对象)

    Clob:文本大对象,最长4G Blob:二进制数据大对象,最长4G util: public class HibUtil { private static SessionFactory sessio ...

  5. Jakarta项目

    Jakarta项目是ASF(The Apache Software Foundation)的一部分.ASF是一个非赢利组织,她鼓励基于开放的软件许可下进行合作.注重实效的开发,并提供各个领域的高质量软 ...

  6. selenium IDE常用命令

    1.open(URL)命令                 1.作用:打开指定的URL,URL或者为相对或是绝对的URL                 2.target:要打开的URL,value值 ...

  7. 使用Sql分页方法给Repeater控件分页的方法

    页面代码 <div class="bookList"> <asp:Repeater ID="rpBooks" runat="serv ...

  8. 基于快速排序的数组划分:2组 3组 K组(sort color)大小写排序 · Partition Array

    2组: [抄题]: 给出一个整数数组 nums 和一个整数 k.划分数组(即移动数组 nums 中的元素),使得: 所有小于k的元素移到左边 所有大于等于k的元素移到右边 返回数组划分的位置,即数组中 ...

  9. C#以记事本(指定程序)打开外部文档(指定文档)

    System.Diagnostics.Process.Start("notepad.exe", "D:\\a.txt");

  10. cout<<endl 本质探索

    C++中,有一种对象叫操控器(manipulators),专门用来操控stream的对象,在C++标准中,预定义好几种操控器,常见的有: flush 刷新output缓冲区,将内容写入输出设备 end ...