`
学会做人
  • 浏览: 121219 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Oracle 的树形递归查询

阅读更多

一、树型表结构:

节点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数据库在处理树形结构数据时提供了强大的递归查询功能,这种特性对于组织结构、产品分类、层级菜单等场景的应用非常广泛。递归树形结构查询主要依赖于`CONNECT BY`和`PRIOR`关键字,它们允许我们构建复杂的...

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

    Oracle数据库系统在处理层次数据或树形结构时,提供了强大的工具——递归查询。递归查询允许我们在数据表中处理嵌套级别的数据,这在权限查询、组织结构、产品分类等场景中尤其常见。本文将深入探讨Oracle中的树状...

    递归查询菜单树,支持mysql,oracle

    在构建应用程序时,特别是涉及到用户界面的交互,如菜单系统,我们经常需要将数据组织成层次结构,例如树形结构。这里,我们将深入探讨如何使用递归查询来构建菜单树,并特别关注在MySQL和Oracle这两种广泛使用的...

    Oracle查询树形结构

    在 Oracle 中,查询树形结构可以使用 START WITH...CONNECT BY PRIOR 子句实现递归查询。其基本语法是: SELECT * FROM tablename START WITH cond1 CONNECT BY cond2 WHERE cond3; 其中,COND1 是根结点的限定...

    在db2和oracle中的对树的递归查询语句

    本文将深入探讨这两个数据库系统中如何使用递归查询语句来操作树形结构。 首先,让我们理解什么是树形结构。在数据存储中,树形结构是一种层次化的数据模型,它由节点(或称为记录)组成,每个节点可以有零个或多...

    Oracle 递归函数介绍

    Oracle 递归函数是一种特殊的PL/SQL函数,可以用于解决复杂的树形结构查询问题。递归函数可以自我调用,以便遍历树形结构的每个节点,直到达到停止条件。 在 Oracle 中,递归函数的定义语法如下所示: ```sql ...

    Oracle递归查询

    为了更好地理解Oracle中的递归查询,我们首先需要创建一张表格来存储一个简单的树形结构。下面是一张名为`TEST_TREE`的表,包含以下列: - `ID`: 主键,标识每个节点。 - `PID`: 父节点ID,表示当前节点的上一级...

    Oracle递归SQL学习

    在本主题中,我们将深入探讨如何利用递归SQL在Oracle中展示一棵树形结构,以及如何根据父ID遍历所有的子ID。 首先,让我们分析给出的SQL查询语句: 1. `start with id = #id#` 这是递归查询的起点,`#id#`是一个...

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

    在MySQL中实现树形递归查询,由于MySQL本身并不直接支持类似于Oracle的`START WITH ... CONNECT BY`语法,因此需要采用其他策略。通常,我们可以利用自定义函数或递归查询的方式来处理树形结构数据。以下将详细介绍...

    数据库设计之递归树查询

    `WITH`语句配合递归选项,可以实现递归查询,非常适合处理树形结构数据。 三、`WITH RECURSIVE`语法 在支持`WITH RECURSIVE`的数据库(如PostgreSQL、SQL Server)中,递归查询的通用语法如下: ```sql WITH ...

    dhtmlx tree 使用,与oracle递归查询的结合

    将dhtmlx Tree与Oracle的递归查询结合起来,可以在前端展示由后端数据库动态生成的树形结构。这不仅可以减少服务器负载,因为大部分数据处理都在数据库层面完成,而且由于减少了网络传输的数据量,提高了整体性能。...

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

    在Oracle数据库中,递归查询是一种强大的工具,用于处理层级数据结构,如组织结构、文件系统或树形关系。在本篇文章中,我们将探讨如何利用递归查询来查找父子兄弟节点,这对于理解和处理这类关系非常关键。 首先,...

    oracle树形结构,结合dtree插件使用显示树状结构菜单

    总结来说,Oracle树形结构结合dtree插件能够帮助开发者有效地展示和操作层次化数据,这对于那些需要直观呈现层级关系的应用场景非常有用。在实际项目中,理解如何使用Oracle的层次查询和dtree插件的配置至关重要,这...

    oracle菜单树查询

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

    Oracle树结构查询(图)

    Oracle通常使用自连接来模拟树形结构,即通过一个表中的字段引用自身来建立层级关系。例如,一个"员工"表中,"上级员工ID"字段可以引用"员工ID"字段,形成上下级关系,从而构建出组织结构的树状模型。 查询树结构...

    MySQL递归查询

    MySQL 递归查询是指在 MySQL 中实现类似 Oracle Hierarchical Queries 的功能,用于查询树形结构中的所有子节点。由于 MySQL 目前还没有内置的递归查询功能,因此需要使用其他方法来实现。 第一种方法:使用函数来...

    Oracle SQL树形结构查询

    Oracle SQL 提供了 `START WITH...CONNECT BY PRIOR` 语句来实现递归查询,使得我们可以轻松地遍历和检索这些树形结构。 首先,`START WITH` 子句定义了查询的起点,即树形结构中的根节点或者一个特定的起点节点。...

Global site tag (gtag.js) - Google Analytics