最近在工作中需要统计系统各个菜单的访问情况,这些情况可以从用户访问的日志表中获取。由于整个系统树形菜单ID不是按照某种规律设计的,父子菜单在菜单Id上没有什么规律,所以要统计各菜单的访问量时SQL不好写(本人目前的SQL书写能力不是很好啊),费了很大的周折,发现原来Oracle数据提供了一种查询树形菜单的SQL。在这做个笔记,主要是用到了一下的
select * --此处可以组合要查的内容,比如我就想查当前菜单的根节点是谁
from table_name(0) t
start with t.id(1) = &menuRoot(2)
connect by prior t.id(1) = t.p_id(3)
其中(0)是菜单表,(1)是菜单ID,(2)是你想起始的菜单ID,(3)是菜单父ID。这种写法是从上之下的查找。把connect by prior t.id(1) = t.p_id(3)
换成connect by prior t.p_id(3) = t.id(1)
则是从下往上查找,即从子节点查父节点。
期间用到一个函数,sys_connect_by_path(),可以拼出想要的路径信息。
我用的SQL如下:
select t.*,
SYS_CONNECT_BY_PATH(t.module_name, '->') pathDesc,
substr(sys_connect_by_path(t.module_id, '$') || '$',
2,
instr(sys_connect_by_path(t.module_id, '$') || '$', '$', 1, 2) - 2) p_id
from oas.sc_menu t
start with t.parent_id = 'kb_menu_root'
connect by prior t.module_id = t.parent_id
分享到:
相关推荐
ORACLE查询树型关系(connect_by_prior_start_with)
Oracle_start_with_connect_by_prior_用法[文].pdf
oracle中的数查询,介绍的详细,有例子。
connect by prior数据库树的应用
oracle中 connect by prior 递归算法 Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的
Oracle start with.connect by prior子句实现递归查询
oracle菜单树查询 使用实例 使用START WITH CONNECT BY PRIOR子句实现递归查询
主要给大家介绍了关于Oracle递归查询start with connect by prior、的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
1. 查询本节点及本节点以下的所有节点: ...SELECT RPAD( ' ', 2*(LEVEL-1), '-' ) || DEPNAME "DEPNAME",CONNECT_BY_ROOT DEPNAME "ROOT",CONNECT_BY_ISLEAF "ISLEAF",LEVEL ,SYS_CONNECT_BY_PATH(DEPNAM
NULL 博文链接:https://yunqiang-zhang-hotmail-com.iteye.com/blog/1312354
Oracle 递归查询, start with connect by prior 用法 find_in_set 函数 concat,concat_ws,group_concat 函数 MySQL 自定义函数 手动实现 MySQL 递归查询 Oracle 递归查询 在 Oracle 中是通过 start ...
介绍了将多行转为字符串的三种方案,并比较了三种方案的执行效率. 1.sys_connect_by_path + start with ... connect by ... prior + 分析函数 2.自定义Function/SP 3.使用 Oracle 10g 内置函数 wmsys.wm_concat
Oracle row_number()over start with...connect by prior start with...connect by prior
sar_model的加载包:beta_prior、compare_models、compare_weights、compare_weights2、compare_weights3
本文介绍Oracle中使用START WITH...CONNECT BY PRIOR子句实现递归查询树形结构的方法,小伙伴们可以参考一下。
不知道你用过这个东东没有,以前也是没使用过这个prior,感觉oracle的知识太少,所以根据我学习的经验总结给大家看它的作用以及他是怎么使用的,你可以自己比较一下自己遍历树的方法和这种方法的区别。
一、 ORA-01436报错 开发遇到一个报错 ORA-01436: CONNECT BY loop in user data (ORA-01436: 用户数据中的 CONNECT BY 循环)。...CONNECT BY PRIOR r1.region_id = r1.parent_id; 如果数据在region
第一章 Oracle数据库基础 23 §1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24 §1.2.2 数据字典概念 25 §1.3 ...