`
sony-soft
  • 浏览: 1027229 次
文章分类
社区版块
存档分类
最新评论

Oracle 的树形递归查询

 
阅读更多

url:http://762626559-qq-com.javaeye.com/blog/382983

一、树型表结构:

节点ID 上级ID 节点名称

二、公式:

select 节点ID,节点名称,level

from

connect by prior 节点ID=上级节点ID

start with 上级节点ID=节点值

说明:

1、常见的树形结构为公司组织机构、地区……

2、求节点ID以上的结构,或以上的结构,将“节点ID=上级节点ID”左右顺序换一下即可。

3LevelOracle的特殊字段,表示“层”的意思。当前节点ID的下一层节点为“1”。

--测试SQL:

说明1、求002以下(或以上)所有子节点和层次(动态:总是从1开始算),但不包括自身

说明2、如果求002以上的节点,则“connect by prior topno=departno”,“=”两边的条件换位即可。

select departno,departname,level

from dept

connect by prior departno=topno

start with topno='002';

--

测试数据

create table Dept(

DepartNO varchar2(10),

DepartName varchar2(20),

TopNo varchar2(10));

insert into Dept values('001',' 董事会','0');

insert into Dept values('002','总裁办 ','001');

insert into Dept values('003','财务部 ','001');

insert into Dept values('004','市场部 ','002');

insert into Dept values('005','公关部 ','002');

insert into Dept values('006','销售部 ','002');

insert into Dept values('007','分销处 ','006');

insert into Dept values('008','业务拓展处','004');

insert into Dept values('009','销售科','007');

向前查 比如

select distinct departno,departname,level

from dept

connect by prior topno=departno

start with

departno='005';

那么其实是查005自身以及上级,

所以结果是005,002,001

============================================================================================

写递归最关键的要定义出来 递归函数 ,递归函数 最关键的要定义出来它的 参数 .和它的 返回值

咱么做展现,不用返回值,直接做展现就行了,参数最重要,那就分析一下参数怎么去定义?这时候要

分析递归的过程,递归过程什么样呢?根据它的 id 找它的 id,根据它的 id 找到它的孩子,根据它

的孩子再找到它的孩子.那么分析这个参数肯定是一个id,因为只有传进来id,才知道怎么去找这个id

下面的孩子. 所以最关键定义出存储过程的参数

create or replace procedure p (v_pid article.pid%type, v_level binary_integer) is

cursor c is select * from article where pid = v_pid;

v_preStr varchar2(1024) := '';

begin

for i in 1..v_level loop

v_preStr := v_preStr || '****';

end loop;

for v_article in c loop

dbms_output.put_line(v_preStr || v_article.cont);

if(v_article.isleaf = 0) then

p (v_article.id, v_level + 1);

end if;

end loop;

end;

--展现emp表的树状结构

create or replace procedure p

(v_empno emp.empno%type, v_grade binary_integer)

is

cursor c is

select * from emp where mgr = v_empno;

v_preStr varchar2(4000) := '';

v_i binary_integer := 0;

begin

while v_i < v_grade loop

v_preStr := v_preStr || '****';

v_i := v_i + 1;

end loop;

for v_emp in c loop

dbms_output.put_line(v_preStr || v_emp.ename);

p(v_emp.empno, v_grade + 1);

end loop;

end;

declare

v_emp emp%rowtype;

begin

select * into v_emp from emp where mgr is null;

dbms_output.put_line(v_emp.ename);

p(v_emp.empno, 1);

end;

分享到:
评论

相关推荐

    Oracle递归树形结构查询功能

    oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的。这篇文章给大家介绍了Oracle递归树形结构查询功能,需要的朋友参考下

    Oracle中的树状查询(递归查询)

    Oracle中的树状查询(递归查询),权限查询,树形结构

    Oracle通过递归查询父子兄弟节点方法示例

    主要给大家介绍了关于Oracle如何通过递归查询父子兄弟节点的相关资料,递归查询对各位程序员来说应该都不陌生,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

    Mysql树形递归查询的实现方法

    对于数据库中的树形结构数据,如部门表,有时候,我们需要知道某部门的所有下属部分或者某部分的所有上级部门,这时候就需要用到mysql的递归查询 最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的...

    Oracle递归查询

    有的情况下,我们需要用递归的方法整理数据,这才程序中很容易做到,但是在数据库 ...下面我以最典型的树形结构来说明下如何在Oracle使用递归查 询。 为了说明方便,创建一张数据库表,用于存储一个简单的树形结构

    oracle菜单树查询

    oracle菜单树查询 使用实例 使用START WITH CONNECT BY PRIOR子句实现递归查询

    Oracle SQL树形结构查询

    本文介绍Oracle中使用START WITH...CONNECT BY PRIOR子句实现递归查询树形结构的方法,小伙伴们可以参考一下。

    PostgreSQL树形结构的递归查询示例

    背景 处理不确定深度的层级结构,比如组织机构,一个常用的设计是在一张表...最近在项目中使用PostgreSQL来查询树形数据,记录一下。 构造样本数据 drop table if exists demo.tree_data; create table demo.tree_d

    mysql 递归

    用mysql实现oracle递归,通过with as 来实现

    Oracle的递归

    Startwith...ConnectBy子句递归查询一般用于一个表维护树形结构的应用。 创建示例表:CREATETABLETBL_TEST(IDNUMBER,NAMEVARCHAR2(100BYTE),PIDNUMBERDEFAULT0);插入测试数据:INSERTINTOTBL_TEST(I

    Orcale查询树形结构

    Oracle中的select语句可以用START WITH…CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:  select * from tablename start with cond1  connect by cond2  where cond3; ...

    jQuery zTree插件快速实现目录树

    ztree是JQuery的一个开源树形目录的插件,用来快速构建网站的树形目录结构,并且提供了功能丰富,利于扩展...如果要自己从数据库查询树形结构这时候你需要知道oracle的递归查询connect by:oracle中使用start with…con

    PL_sql8.0.1,软件加破解注册机,还有安装说明。

    对象浏览器 ——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、...

    Sqlserver2000经典脚本

    │ 8.2.2 树形数据深度排序处理示例(模拟单编号法).sql │ │ 8.2.2 树形数据深度排序处理示例(递归法).sql │ │ 8.2.3 查找指定节点的所有子节点的示例函数.sql │ │ 8.2.4 查找指定节点的所有父...

    经典SQL脚本大全

    │ │ 8.2.2 树形数据深度排序处理示例(递归法).sql │ │ 8.2.3 查找指定节点的所有子节点的示例函数.sql │ │ 8.2.4 查找指定节点的所有父节点的示例函数.sql │ │ 8.2.5 校验插入指定结点是否导致编码循环的...

    PL/SQL Developer

     对象浏览器——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、...

    PLSQL Developer 7.1.5

     对象浏览器——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、...

    pl/sql developer 9 + 注册机

     可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、浏览数据、在对象...

Global site tag (gtag.js) - Google Analytics