在数据库查询中常常会碰到要查询树形结构的数据,需要用一个字段的数据当做下一条记录的父节点继续查询,如果在不知道有多少级节点的情况下一次次手写SQL查询会很繁琐而没有效率,这时可以使用 oracle中的connect with prior递归算法:
Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的,其基本语法是: 
select ... from tablename start with 条件1 
connect by 条件2 
where 条件3; 
例: 
select * from table 
start with org_id = 'HBHqfWGWPy' 
connect by prior org_id = parent_id;  
在实际使用时遇到两个问题,一是如果把where子句放在start with...connect by...子句后时会提示:ORA-00933:SQl命令未完全结束。此时光标置于where处,如果将where放在 start with...connect by...子句前则可以正常执行。二是查询的数据中不能有自循环,即例子中的 org_id  和 parent_id 在同一条记录中不能相等,否则会提示:ORA-01436:用户数据中的connect by 循环。这两点需要注意。
补注:在遇到有循环的查询时,使用 connect by NOCYCLE prior 就可以避免报错!
以下是参考到的网络文档:
http://www.cnblogs.com/chen1388/archive/2010/09/25/1834827.html
http://zhidao.baidu.com/question/281792402.html
http://zhidao.baidu.com/question/281792402.html

ORACLE中使用递归查询相关推荐

  1. oracle中的递归查询

    一.oracle中的递归查询上下级部门关系 采用的语法为 start with ... connect by ..... = prior .... 我们部门表中存在这样几条记录 id parent_i ...

  2. sql oracle 递归查询语句,oracle递归函数 oracle中SQL递归查询

    关于oracle递归调用的自定义函数如何结束 比如存储过程a中有b,b中含a.用return结束判断,执行还是锁表,怎么解决 关于oracle递归调用的自定义函数如何结束 可以调用. C语言最基本的模 ...

  3. Oracle中SQL递归查询

    SQL的递归查询应用场景: 在一个系统中往往需要保存机构,地区,岗位,商品品类,菜单等等树状结构的数据,使用递归查询能够快速的获取这些树状结构数据的关联关系.树结构的数据存放在表中,数据之间的层次关系 ...

  4. oracle 中的递归查询

    本文整理自网络: 一.树型表结构: 节点ID  上级ID  节点名称 二.公式: select 节点ID,节点名称,level from 表 connect by prior 节点ID=上级节点ID ...

  5. PostgreSQL 中的递归查询 与oracle 的比较

    PostgreSQL 中的递归查询,2种方法: 1.用with decursive WITH RECURSIVE d AS (SELECT d1.id,d1.parent_id,d1.caption ...

  6. Oracle中start with xx connect by prior 语句解析

    Oracle中start with xx connect by prior 语句解析 ​ Oracle这种的start with语句主要对B型树的数据进行递归查询.可以指定数据树上的任一节点,然后查找 ...

  7. 1.oracle中的exists 和not exists 用法:

    1.oracle中的exists 和not exists 用法: exists (sql 返回结果集为真) not exists (sql 不返回结果集为真) 如下: 表A ID NAME 1 A1 ...

  8. oracle中start with和connect by的用法理解

    Oracle中start with和connect by 用法理解 转自:http://www.blogjava.net/xzclog/archive/2010/03/05/314642.html,多 ...

  9. oracle 存储过程 状态,查看ORACLE中正在运行的存储过程 | 学步园

    1.如何查看ORACLE中正在运行的存储过程 select owner,name from v$db_object_cache where type like '%PROCE%' and locks ...

最新文章

  1. 稳压管,TVS管,压敏电阻,气体放电管等电涌保护器器件比较------amoBBS
  2. gcc编译自定义头文件
  3. [PHP] 编写爬虫获取淘宝网上所有的商品分类以及关键属性 销售属性 非关键属性数据...
  4. Axure RP一个专业的快速界面原型设计工具
  5. 电厂运维的cis数据_数据中心运维,太难难难了
  6. python3.6卸载教程_Python3.6安装卸载、执行命令、执行py文件的方法详解
  7. Linux双网卡绑定实现
  8. VC++6.0如何创建与调用动态链接库(dll)
  9. SpringBoot-拦截器和文件上传
  10. 古典密码算法 java_古典密码算法的实现
  11. js固定小数位数 .toFixed()
  12. “美国人工智能倡议”解读
  13. 【python小技巧】 批量将.png格式图片转换为.jpg格式图片
  14. fortran教程9:和C语言混合编程
  15. 安彦Linux系统时间同步
  16. java几种对象的区别(PO,POJO,VO,BO,DAO)
  17. 基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计
  18. MIT多变量微积分--3.矩阵,逆矩阵
  19. rs232读取智能电表_智能电表防窃电原理 偷电为什么会被发现
  20. 芯片噪声测试软件,教你如何测量芯片数字模拟噪声 - 全文

热门文章

  1. typescript或javascript深拷贝Object json
  2. 读卡距离和信号强度两方面来考虑
  3. Java面试170题答案解析(1-20题)
  4. libsvm数据缩放方法
  5. ActiveRecord.JS 与 Google Gears
  6. java中的Iterator和Iterable 区别
  7. Linux卸载/删除多余网卡
  8. Oracle对表空间操作的sql
  9. 滑动切换activity
  10. 康乐php一键脚本,kangle一键脚本