Oracle数据库树形菜单统计(connect by prior,sys_connect_by_path)

最近在工作中需要统计系统各个菜单的访问情况,这些情况可以从用户访问的日志表中获取。由于整个系统树形菜单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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值