Oracle实现递归查询
前几天在开发的过程中遇到一个递归查询的问题,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实现递归查询的更多相关文章
- sqlserver和oracle的递归查询
1.sqlserver递归查询方式 CTE: if OBJECT_ID('tb','N') is not null drop table tb; create table tb(id va ...
- Oracle 的递归查询将层级变成字符串
select A.PARENT_GROUP_ID, A.GROUP_ID,sys_connect_by_path(A.GROUP_ID,'/') || '/' path from dam_dataen ...
- Oracle 递归查询
现实中我们经常需要用到一些递归查询,下面我们来介绍下ORACLE中递归查询的使用. 首先我们先新建一个表来存储以上信息 create table FAMILY ( person_id INTEGER, ...
- 你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗
ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性: Oracle.MYSQL与DB2可在所有主流平台上运行: SQL Server只能在Windows下运行: --安 ...
- Oracle约束(Constraint)详解
概述 约束是数据库用来确保数据满足业务规则的手段,不过在真正的企业开发中,除了主键约束这类具有强需求的约束,像外键约束,检查约束更多时候仅仅出现在数据库设计阶段,真实环境却很少应用,更多是放到程序逻辑 ...
- Oracle和Mysql语法异同整理笔记
目录 (1) 模糊匹配 (2) 删除数据 (3) 时间函数 (4) 关键字问题 (5) 递归查询 (6) 排序问题 (7) 空值返回0 (8) 取最大值 (9) 列转换函数 (10) 类型转行函数 @ ...
- Mysql实现树形递归查询
最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的函数,mysql并没有,所以就只好想自定义函数或者找到替换函数的方法进行改造. Oracle递归查询 oracle实现递归 ...
- 利用Oracle分析函数row_number和sys_connect_by_path实现多行数据合并为一行
emo场景,以oracle自带库中的表emp为例: select ename,deptno from emp order by deptno; ENAME DEPTNO CLARK 10 KING 1 ...
- oracle小知识点
一 . procedure和function: procedure和function在语法上几乎完全一样,使用上却有小小的差别, procedure可以单独的调用 在命令行直接exec pro_xxx ...
随机推荐
- servlet和JSP页面乱码问题
JSP和Servlet的中文乱码处理 前几天学习了JSP和Servlet中有关中文乱码的一些问题,写成了博客,今天进行更新一下.应该是可以解决日常的乱码问题了.现在作以下总结希望对需要的人有所帮助.我 ...
- TensorFlow RNN MNIST字符识别演示快速了解TF RNN核心框架
TensorFlow RNN MNIST字符识别演示快速了解TF RNN核心框架 http://blog.sina.com.cn/s/blog_4b0020f30102wv4l.html
- Gson转换时,Double转式化
package com.mall.core; import java.lang.reflect.Type; import java.text.DecimalFormat; import com.goo ...
- WebDriverException:Element is not clickable at point - selenium执行过程中遇到的相关报错
Element is not clickable at point (x, y) 这段可以忽略:本文来自 https://www.cnblogs.com/lozz/p/9947430.html 引起这 ...
- 神经网络出现nan原因?以及解决
之前在TensorFlow中实现不同的神经网络,作为新手,发现经常会出现计算的loss中,出现Nan值的情况,总的来说,TensorFlow中出现Nan值的情况有两种,一种是在loss中计算后得到了N ...
- 123. Best Time to Buy and Sell Stock III (Array; DP)
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- stuff函数(转)
在上篇博文中提到了stuff函数 在这篇博文中对stuff函数进行了详解 本片博文系转载,但对原文顺序做了下调整 示例 以下示例在第一个字符串 abcdef 中删除从第 2 个位置(字符 b)开始的三 ...
- 20-最大k乘积问题
/* 最大k乘积问题 题目内容: 设I是一个n位十进制整数.如果将I划分为k段,则可得到k个整数. ...
- MQ java 基础编程
MQ java 基础编程 编写人:邬文俊 编写时间 : 2006-2-16 联系邮件 : wenjunwu430@gmail.com 前言 通过 2 个多星期对 MQ 学习,在 partner 丁 & ...
- maven项目工程目录约定
使用maven创建的工程我们称它为maven工程,maven工程具有一定的目录规范,如下: src/main/java —— 存放项目的.java文件 src/main/resources —— 存放 ...