一、首先从一个经典的查询序列数例子入手:
select level from dual connect by level <= 10
select level from dual connect by 1 = 1
上例均可查询得到1 .. N 的序列(但最多100行)
我们来分析一下其工作原理,level<=10用来控制循环的次数,即要重复多少次扫描表dual中的内容。第一次扫描得出的结果集的level都是1,第二次扫描的结果集的level都是2,依此类推。可能用文字描述的不太容易懂,下面我们通过试验来说明:
with x as
( select 'aa' chr from dual
union all
select 'bb' chr from dual)
select level ,chr,lpad( ' ' ,( level - 1 )* 5 , '-' )||chr other from x connect by level <= 3
可见是全部level的树形结构,当扫描对象是dual时,即一个level只生成一条记录.
二、如何解决from dual只显示100行的问题:
selectlevel from dual connectbylevel <=300
只显示100行,但据说只是9i的显示问题,解决方法如下:
select * from (level from dual connectbylevel <=300)
即可显示300行!用以解决无法多行显示问题
应用举例如下:
select to_date( 2008 || '0101' , 'yyyymmdd' ) + rownum - 1 rq,
to_char(to_date( 2008 || '0101' , 'yyyymmdd' ) + rownum - 1 , 'day' ) day
from ( select rownum from dual
connect by rownum <= to_date( 2008 || '1231' , 'yyyymmdd' ) - to_date( 2008 || '0101' , 'yyyymmdd' )+ 1 );
作用:列出所有日期及星期几,可用于查询工作日
三、start with ... connect by 用法讲解:
select TBL_TEST.*, level from TBL_TEST
start with pid= 1 -- 可写到 connect by 后面
connect by prior pid = id ;
select TBL_TEST.*, level from TBL_TEST
start with id = 5 -- 可写到 connect by 后面
connect by prior pid = id
说明:
1、先从start with pid=1 句开始查询 得到 2 11 1 1 =====> level置1;
2、根据pid = id,查询 id=1 句,得到 1 10 0 2 =====> level置2;
3、根据pid = id,查询 id=0 句,未查询到后结束该树枝;
注:prior pid = id 句说明 pid是id的父节点,通过pid查询id
四、sys_connect_by_path函数讲解:
sys_connect_by_path函数主要作用是可以把一个父节点下的所有子节点通过某个字符进行区分,在一个格中显示
select level ,sys_connect_by_path( id , '/' ) from TBL_TEST
start with pid= 1
connect by prior pid = id ;
select level ,sys_connect_by_path(pid, '/' ) from TBL_TEST
start with pid= 1
connect by prior pid = id ;
可以比较这两段代码的运行结果与code example1的结果之间的差异,即可理解此函数用法
或具体看下面的例子中对sys_connect_by_path的使用
分享到:
相关推荐
Connect By 可以列出上下级关系 构造序列 求排列组合 逆转求出下上级的关系路径
NULL 博文链接:https://freejvm.iteye.com/blog/550858
oracle connect by 和 分析函数总结.doc
在Oracle中用Start with...Connect By子句递归查询
Oracle Connect by
oracle中 connect by prior 递归算法 Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的
本文章详细介绍了Oracle中connect by...start with...的用法。
通过实例比较了 SYS_CONNECT_BY_PATH 和 CONNECT_BY_ROOT 的异同,和返回树形的数据结构
Oracle start with.connect by prior子句实现递归查询
oracle中的数查询,介绍的详细,有例子。
主要给大家介绍了关于Oracle递归查询start with connect by prior、的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
ORACLE查询树型关系(connect_by_prior_start_with)
文档详述问题的解决办法,附资源instantclient_11_2.zip,一键解决问题
connect to _username identified by _passowrd using '_servername/_serverurl'; */ /*调用 select * from _table_name@_link_name */ create database link link_zhangli connect to zhangli identified by ...
行列转换,层级关系,oracle sys_connect_by_path的用法
NULL 博文链接:https://yunqiang-zhang-hotmail-com.iteye.com/blog/1312354
Oracle_start_with_connect_by_prior_用法[文].pdf
许多情况下,由于程序中需要将行转为列展示,如果使用ORACLE那么这个资源适合你。
今天无意间,看connect by的使用,看到了sys_connect_by_path的用法,算是给我一个另类的惊喜了,sys_connect_by_path(columnname, seperator) 也可以拼出串来,不过这个函数本身不是用来给我们做这个结果集连接用...