`
keepwork
  • 浏览: 334195 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle--递归

 
阅读更多

开发者博客www.developsearch.com

 

 

CONNECT BY 递归查询树形结构关系

命令格式如下:
SELECT ….. CONNECT BY {PRIOR 列名1=列名2|列名1=PRIOR 列名2}
[START WITH];
其中:CONNECT BY子句说明每行资料将是按层次顺序检索,并规定将表中的资料连入树形结构的关系中。
0PRIORY运算符必须放置在连接关系的两列中的某一个的前面。对于节点间的父子关系,PRIOR去处符在一侧表示父节点,
在别一侧表示子节点,从而确定查找权结构的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,
还允许使用列运算式。START WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节点。
例子:

从Root往树末梢递归 

select * from TBL_TEST
 start with id=1
 connect by prior id = pid

 从末梢往树ROOT递归

select * from TBL_TEST
 start with id=5
 connect by prior pid = id

可通过level 关键字查询所在层次 

select a.*,level from TBL_TEST
start with id=1
 connect by prior id = pid 

通过子节点获得顶节点

select FIRST_VALUE(deptid) OVER (ORDER BY LEVEL DESC ROWS UNBOUNDED PRECEDING) AS firstdeptid 
from persons.dept start with deptid=76 connect by prior paredeptid=deptid  

下拉中用数据源取年份时,可用如下方式写:
select * from
(select rownum,to_char(add_months(sysdate, 4), 'yyyy') - rownum
from dual connect by rownum<5);

 

递归删除树节点

/**
	 * 递归删除所有子节点
	 */
	public void removeNode(Long areaId){
        List<Object> args = new ArrayList<Object>();
        args.add(areaId);
        
		StringBuffer sql = new StringBuffer("");
		sql.append(" delete from CDH_NEWRBT_AREA t where t.area_id in ");
		sql.append(" ( ");
		sql.append(" 	select a.area_id from CDH_NEWRBT_AREA a ");
		sql.append(" 	start with a.area_id = ? ");
		sql.append(" 	connect by prior  a.area_id = a.parent_id");
		sql.append(" ) ");
		log.info(sql.toString());
        
        this.executeUpdateSql(sql.toString(), args);
    }
	
	public int executeUpdateSql(final String sql, final List<Object> args){
        return (Integer)getHibernateTemplate().execute(new HibernateCallback() {
            public Object doInHibernate(Session session) throws HibernateException {
                Query query = session.createSQLQuery(sql);
                if (args != null && args.size() > 0) {
                    Object[] values = args.toArray();
                    for (int i = 0; i < values.length; i++) {
                        query.setParameter(i, values[i]);
                    }
                }                
                return query.executeUpdate();
            }
        });    
    }

 

 

 

oracle : 

 

        select t.organization_id from ims_rt_organization t

       connect by prior t.organization_id = t.super_organization_id

                start with t.super_organization_id=#value#

 

        //得到本组织所有的上级组织ID

        select t.super_organization_id from ims_rt_organization t

                 connect by prior t.super_organization_id = t.organization_id

                  start with t.organization_id=#value#

 

 

db2 :

with b(organization_id) as (

             select organization_id

                from ims_rt_organization where  organization_id = #value#

         union all

             select a.organization_id

                 from ims_rt_organization as a,b

              where b.organization_id = a.super_organization_id )

select * from b

 

开发者博客www.developsearch.com

分享到:
评论

相关推荐

    oracle-递归查询地区名称

    oracle 递归调用 地区 ,用到的方法是 SYS_CONNECT_BY_PATH,可以扩展层级 名称

    oracle递归、迭代

    ### Oracle中的递归查询详解 #### 一、引言 在数据库管理中,处理具有层次结构的数据是一项常见的任务。例如,在组织结构、产品分类或文件系统等场景中,经常需要查询这种类型的层级数据。Oracle数据库提供了强大...

    Oracle 递归函数介绍

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

    Oracle递归SQL学习

    这是Oracle递归查询的关键部分。`connect by`子句定义了层次之间的连接规则。在这里,`prior`关键字用来引用上一层的值,即父节点的`parent_id`应该等于当前行的`id`,这样我们就沿着父到子的方向遍历树。 3. `...

    Oracle递归树形结构查询功能

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

    Oracle-错误一览表.doc

    10. **A-00036**: 超过递归SQL的最大深度,通常发生在复杂的嵌套查询或存储过程中。 11. **A-00054**: 资源正忙,并且请求了NOWAIT选项,这意味着操作无法立即完成,因为资源被其他事务占用。 12. **A-00056**: ...

    oracle-tree-sql.rar_oracle

    它允许我们指定一个层级关系的起始点,并按照指定的规则递归地遍历整个树。基本语法如下: ```sql SELECT column_list FROM table_name START WITH condition CONNECT BY prior column = parent_column; ``` 其中,...

    oracle递归查询向上向下.txt

    oracle递归查询

    oracle-OCP教程中文版

    1. **高级SQL**:深入学习SQL的高级特性,如窗口函数、集合操作和递归查询。 2. **数据库安全**:理解Oracle的权限和角色管理,以及如何设置用户权限、审计和加密。 3. **数据库复制**:了解Oracle的复制技术,如...

    oracle递归查询的例子

    ### Oracle 递归查询详解及实例 #### 一、引言 在数据库查询语言中,Oracle 提供了一种强大的功能——递归查询,这在其他数据库系统如 SQL Server 中是缺失的功能。递归查询允许用户执行多级关联查询,特别适用于...

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

    这里,我们将深入探讨如何使用递归查询来构建菜单树,并特别关注在MySQL和Oracle这两种广泛使用的数据库系统中的实现。 首先,我们要理解什么是递归查询。递归查询是一种在数据库中处理层次数据的方法,它通过自身...

    oracle-sql.ppt

    13. **高级SQL特性**:Oracle SQL还包括窗口函数、集合操作、递归查询等高级特性,这些可能在后续章节中被详细探讨。 通过这个23章的PPT学习,读者将能够熟练地运用Oracle SQL进行数据库操作,理解其背后的逻辑,并...

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

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

    Oracle递归查询

    ### Oracle递归查询详解 #### 一、引言 在处理具有层级结构的数据时,递归查询是一项非常有用的技能。例如,在处理组织架构、产品分类等数据时,我们经常需要查询某一节点及其所有子节点或者从某个节点追溯到其根...

    Oracle-IO问题及性能调优.pdf

    Oracle数据库的I/O性能问题及调优是数据库管理和性能优化的重要环节。I/O性能问题通常由磁盘I/O速度和效率所引起,它直接影响到数据库操作的响应时间,包括查询、更新、事务提交等。而性能调优则涉及到多种技术手段...

    递归查询父子关系记录 oracle

    oracle 如何递归查询父子关系。经常用于构造树结构

    ORACLE报错大全

    从 ORA-0061 到 ORA-0100,报错代码主要涉及性能和优化相关的错误,例如超出最大递归 SQL 级数、超出最大入队数、DB_BLOCK_SIZE 必须为 2 的幂等。 在了解 Oracle 报错大全之后,可以帮助开发者和 DBA 快速定位和...

    Oracle Press - Oracle Database 11g SQL

    10. **高级SQL特性**:如递归查询(CONNECT BY)、分区表、物质化视图、物化查询块、索引组织表等,这些都是提升数据库性能的重要手段。 11. **数据类型**:详述Oracle支持的各种数据类型,如数值型、字符型、日期...

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

    综合以上信息,dhtmlx Tree结合Oracle递归查询提供了一种高效的方法来展示层次结构数据。通过优化数据库查询并减少应用程序中的计算负担,这种方法可以显著提升Web应用的性能。理解如何编写适当的SQL查询以及如何将...

Global site tag (gtag.js) - Google Analytics