通过连接实现层级函数(4)
2010-02-24 21:52
197 查看
以上的问题是只有知道树的结构才可以遍历,如果不知道怎么办呢 那么咱们可以用connect by 函数来让他自己遍历
咱们通过定位起点start with 来实现,指定你要遍历的parent_col 和 child_col 就可以了,prior 放在提供用于检索的字面值的列前面,实际prior是用于定位父子关系的,prior放在父节点的字段之前
start with
connect by col1 = prior col2
还是上次用的环境
发现没,实际用connect by 是把每个分支一直遍历到叶子节点才肯切换到下一个子节点继续遍历,简直就是吸干了一个子节点,才肯换到另一个子节点。
这种样子太难看换显示方法
lpad函数就是如果第一个参数不满足第二个参数设定的长度,那么从左开始自动补充第三个参数指定的字符。这里没有指定第三个参数默认为空格space,
说实话这样还是难看,那么咱们继续改
发现没这个sys_connect_by_path实际上是提供了上一级别的目录的名称,oracle还是很善解人意的嘛
咱们通过定位起点start with 来实现,指定你要遍历的parent_col 和 child_col 就可以了,prior 放在提供用于检索的字面值的列前面,实际prior是用于定位父子关系的,prior放在父节点的字段之前
start with
connect by col1 = prior col2
还是上次用的环境
SQL> select * from direct; ID NAME PARENT_ID ---------- -------------------- ---------- 1 oracle 2 assistants 1 3 BIN 1 4 RDBMS 1 5 ADMIN 4 6 demo 4 7 install 4 8 jlib 4 9 catcr.sql 5 10 catawrvw.sql 5 10 rows selected.
SQL> select * from direct 2 start with parent_id is null 3 connect by parent_id = prior id 4 ; ID NAME PARENT_ID ---------- -------------------- ---------- 1 oracle 2 assistants 1 3 BIN 1 4 RDBMS 1 5 ADMIN 4 9 catcr.sql 5 10 catawrvw.sql 5 6 demo 4 7 install 4 8 jlib 4
发现没,实际用connect by 是把每个分支一直遍历到叶子节点才肯切换到下一个子节点继续遍历,简直就是吸干了一个子节点,才肯换到另一个子节点。
这种样子太难看换显示方法
lpad函数就是如果第一个参数不满足第二个参数设定的长度,那么从左开始自动补充第三个参数指定的字符。这里没有指定第三个参数默认为空格space,
SQL> r 1 select level,lpad(' ',level*2-1) || '|' || name AS "Name" 2 from direct 3 start with parent_id is null 4* connect by prior id = parent_id LEVEL Name ----- -------------------- 1 |oracle 2 |assistants 2 |BIN 2 |RDBMS 3 |ADMIN 4 |catcr.sql 4 |catawrvw.sql 3 |demo 3 |install 3 |jlib
说实话这样还是难看,那么咱们继续改
SQL> r 1 select id,sys_connect_by_path(name,'/') name 2 from direct 3 start with parent_id is null 4* connect by prior id = parent_id ID NAME ---------- ----------------------------------- 1 /oracle 2 /oracle/assistants 3 /oracle/BIN 4 /oracle/RDBMS 5 /oracle/RDBMS/ADMIN 9 /oracle/RDBMS/ADMIN/catcr.sql 10 /oracle/RDBMS/ADMIN/catawrvw.sql 6 /oracle/RDBMS/demo 7 /oracle/RDBMS/install 8 /oracle/RDBMS/jlib
发现没这个sys_connect_by_path实际上是提供了上一级别的目录的名称,oracle还是很善解人意的嘛
相关文章推荐
- 通过连接实现层级函数(1)
- 通过连接实现层级函数(2)
- 通过连接实现层级函数(3)
- 通过win7 eclipse 连接虚拟机redhat 上hadoop的实现(中)
- 通过netty实现服务端与客户端的长连接通讯,及心跳检测。
- Linux:宿主机通过桥接方式连接的VMware内部Linux14.04虚拟机(静态IP)实现上网方案
- 函数的二义性与函数对象的传递问题(通过实现vector的to_string示例)
- plsql 通过修改配置文件的方式实现数据库的连接
- php number_format() 函数通过千位分组来格式化数字的实现代码
- loadrunner使用socket协议来实现客户端对服务器产生压力实例。(通过发送心跳包,达到连接多个客户端的目的)
- android 通过WebSocket 实现长连接通讯消息
- 通过Windows Azure Connect ,实现本地机器与Windows Azure 虚拟机的相互连接(转+译)
- CCScheduler(调度器 两种回调1、update回调(通过object的update函数实现所以每次调用) 2、一般回调(通过timer timer是可以设置fSeconds的可变调用间隔))
- 具有无损性连接和保持函数依赖的3NF分解C++实现
- asp通过JMAIL实现通用发送函数
- asp通过JMAIL实现通用发送函数
- 通过NFS来实现两台web服务器的连接
- SSi通过JNDI实现数据库连接
- python通过函数属性实现全局变量的方法
- python通过函数属性实现全局变量的方法