oracle数据库树用法
来源:互联网 发布:照片漫画化软件 编辑:程序博客网 时间:2024/06/08 19:50
--查找看当前节点属于第几层
--Oracle 9i 开始,可以通过
--SYS_CONNECT_BY_PATH
--函数实现将从父节点到当前行内容
--以“path”或者层次元素列表的形式显示出来
select level, sys_connect_by_path(sdc.class_name, '/') path
from std_download_class sdc
start with sdc.parent_class_id = 'ROOT'
connect by prior sdc.ID = SDC.PARENT_CLASS_ID;
--查找最底层节点(最低层节点)
select connect_by_isleaf,sys_connect_by_path(sdc.class_name,'/') path
from std_download_class SDC
start with sdc.parent_class_id = 'ROOT' connect by prior sdc.ID = SDC.PARENT_CLASS_ID;
--查找当前节点的最根节点
select connect_by_root sdc.class_name 根节点名称 ,sys_connect_by_path(sdc.class_name,'/') path
from std_download_class SDC
start with sdc.parent_class_id = 'ROOT' connect by prior sdc.ID = SDC.PARENT_CLASS_ID;
--使用START WITH . . . CONNECT BY . . .
--从句可将父级地区与子级地区连接起来
--,并将其层次等级显示出来。
select level,lpad(' ',level*3)||sdc.class_name class_name from std_download_class SDC
start with sdc.parent_class_id = 'ROOT' connect by prior sdc.ID = SDC.PARENT_CLASS_ID;
---防止死循环引用树结构类型
--在Oracle 10g 之前的版本中,如果在你的树中出现了环状循环
--(如一个孩子节点引用一个父亲节点),Oracle 就会报出一个错误提示:
--“ ORA-01436: CONNECT BY loop in user data”。如果不删掉对父亲的引
--用就无法执行查询操作。而在 Oracle 10g 中,只要指定“NOCYCLE”就可以
--进行任意的查询操作。与这个关键字相关的还有一个伪列——CONNECT_BY_ISCYCLE,
--如果在当前行中引用了某个父亲节点的内容并在树中出现了循环,那么该行的伪
--列中就会显示“1”,否则就显示“0”。而这个功能就可以帮助我们校验一直让我们头
--疼不已的BOM结构死循环(大多由于数据导入形成的),用例:
--表结构:
--create table tree2(parent number,child number);
--insert into tree2 values(null,1);
--insert into tree2 values(1,2);
--insert into tree2 values(2,3);
--insert into tree2 values(3,1);
select connect_by_iscycle,sys_connect_by_path(child,'/') path from tree2 t
start with parent is null connect by nocycle prior child = parent;
select connect_by_iscycle , sys_connect_by_path(t.child,'/') from
tree2 t start with t.parent is null connect by nocycle prior
t.child = t.parent ;
--
select connect_by_iscycle,
sys_connect_by_path(sdc.class_name, '/') path from
std_download_class SDC start with sdc.parent_class_id = 'ROOT' connect by nocycle
prior sdc.ID = SDC.PARENT_CLASS_ID;
--Oracle 9i 开始,可以通过
--SYS_CONNECT_BY_PATH
--函数实现将从父节点到当前行内容
--以“path”或者层次元素列表的形式显示出来
select level, sys_connect_by_path(sdc.class_name, '/') path
from std_download_class sdc
start with sdc.parent_class_id = 'ROOT'
connect by prior sdc.ID = SDC.PARENT_CLASS_ID;
--查找最底层节点(最低层节点)
select connect_by_isleaf,sys_connect_by_path(sdc.class_name,'/') path
from std_download_class SDC
start with sdc.parent_class_id = 'ROOT' connect by prior sdc.ID = SDC.PARENT_CLASS_ID;
--查找当前节点的最根节点
select connect_by_root sdc.class_name 根节点名称 ,sys_connect_by_path(sdc.class_name,'/') path
from std_download_class SDC
start with sdc.parent_class_id = 'ROOT' connect by prior sdc.ID = SDC.PARENT_CLASS_ID;
--使用START WITH . . . CONNECT BY . . .
--从句可将父级地区与子级地区连接起来
--,并将其层次等级显示出来。
select level,lpad(' ',level*3)||sdc.class_name class_name from std_download_class SDC
start with sdc.parent_class_id = 'ROOT' connect by prior sdc.ID = SDC.PARENT_CLASS_ID;
---防止死循环引用树结构类型
--在Oracle 10g 之前的版本中,如果在你的树中出现了环状循环
--(如一个孩子节点引用一个父亲节点),Oracle 就会报出一个错误提示:
--“ ORA-01436: CONNECT BY loop in user data”。如果不删掉对父亲的引
--用就无法执行查询操作。而在 Oracle 10g 中,只要指定“NOCYCLE”就可以
--进行任意的查询操作。与这个关键字相关的还有一个伪列——CONNECT_BY_ISCYCLE,
--如果在当前行中引用了某个父亲节点的内容并在树中出现了循环,那么该行的伪
--列中就会显示“1”,否则就显示“0”。而这个功能就可以帮助我们校验一直让我们头
--疼不已的BOM结构死循环(大多由于数据导入形成的),用例:
--表结构:
--create table tree2(parent number,child number);
--insert into tree2 values(null,1);
--insert into tree2 values(1,2);
--insert into tree2 values(2,3);
--insert into tree2 values(3,1);
select connect_by_iscycle,sys_connect_by_path(child,'/') path from tree2 t
start with parent is null connect by nocycle prior child = parent;
select connect_by_iscycle , sys_connect_by_path(t.child,'/') from
tree2 t start with t.parent is null connect by nocycle prior
t.child = t.parent ;
--
select connect_by_iscycle,
sys_connect_by_path(sdc.class_name, '/') path from
std_download_class SDC start with sdc.parent_class_id = 'ROOT' connect by nocycle
prior sdc.ID = SDC.PARENT_CLASS_ID;
- oracle数据库树用法
- oracle中的数据库用法
- Oracle数据库中序列用法
- oracle数据库序列的用法
- Oracle数据库rownum用法详解
- Sybase数据库和oracle数据库用法
- Oracle数据库中Sequence的用法
- ORACLE数据库中PARTITION的用法
- Oracle数据库中序列用法讲解
- Oracle数据库中序列用法讲解
- oracle数据库中 case when的用法
- Oracle数据库中:ROUND()函数的用法:
- Oracle数据库中distinct的用法
- Oracle数据库中的临时表用法
- oracle数据库树形结构用法总结
- Oracle数据库有关时间操作用法
- Oracle数据库中序列用法讲解
- ORACLE数据库操作简便函数用法
- Mysql和Mongodb的Map reduce
- c# Math类的 基础使用
- 修改linux默认启动级别(包括Ubuntu)
- 如何分析jvm dump线程
- hadoop fs操作 shell 命令大全
- oracle数据库树用法
- js实现页面跳转的几种方式
- 最大后验概率估计算法(简单,通俗易懂)
- Vim简明教程【CoolShell】
- Illegal Instruction 错误初窥
- centos6.4安装gcc4.8.2
- ORECALE类型声明及过程中用OR正则验证
- Android是如何绘制View的
- updatedb: unexpected operand on command line处理