Oracle自定义函数实现递归查询(用自定义函数替换connect_by_root)
创始人
2024-04-14 19:45:31
0

Oracle自定义函数实现递归查询(用自定义函数替换connect_by_root)

  • 1. 前言
  • 2. connect_by_root 和 自定义函数
    • 2.1 用 connect_by_root 实现
    • 2.2 用 自定义函数实现
      • 2.2.1 自定义函数
      • 2.2.2 实现效果

1. 前言

  • 看这篇文章之前可以先看下面的文章

    oracle递归查询(start with connect by prior)以及 树形统计connect_by_root(子节点汇总到父节点).

    数据来源和这篇文章里的一样,所有下面用到就直接给sql了,自己想复制数据的话,可以去上篇文章里拿

2. connect_by_root 和 自定义函数

  • 首先,先给一下表数据设计和想要的效果,不多说,直接给图
    在这里插入图片描述
    接下来就是用两种方式来实现,请继续……

2.1 用 connect_by_root 实现

  • 我这里就直接给个效果图了,sql我就不粘了,上篇文章里都有,剩下的都可以参考上篇文章里的3.3.2章节
    在这里插入图片描述

2.2 用 自定义函数实现

2.2.1 自定义函数

  • 此函数就是根据dept_id找到公司id,直接看函数:
    在这里插入图片描述
    在这里插入图片描述
  • 函数代码:
    create or replace function f_company_id(v_dept_id varchar2) return varchar2 iscompany_id varchar2(100);count_num        number;
    beginselect count(0) into count_num from sys_company_dept t where t.dept_id = v_dept_id and type = '1';if count_num = 1 thenreturn v_dept_id;elseselect f_company_id(t.parent_id) into company_id from sys_company_dept t where t.dept_id = v_dept_id and rownum < 2;return company_id;end if;
    end f_company_id;

2.2.2 实现效果

  • 调用上述函数,通过sql来实现想要的效果,如下
    在这里插入图片描述
  • sql 如下:
    with temp1 as(
    select t.*,f_company_id(t.dept_id) company_id
    from sys_company_dept t)
    select t1.*,t2.dept_name as company_name from temp1 t1
    left join sys_company_dept t2 on t1.company_id=t2.dept_id
    where t2.type='1';
    
  • 欧了,不用自带函数 connect_by_root ,也把问题解决

相关内容

热门资讯

喜闻乐见,2026年“国补”政... 12月30日,国家发展改革委、财政部印发的《关于2026年实施大规模设备更新和消费品以旧换新政策的通...
女子与表姐夫婚外情获赠三百余万... 一桩发生在海南的民间借贷纠纷,将一段持续二十余年的婚外情推到台前。相关材料显示,男子林森(化名)在婚...
诉讼纠纷频发!中央商场子公司又... 继控股子公司新亚百货面临补缴税款及滞纳金7392万元后,百货零售巨头中央商场(600280.SH)另...
从明天起,楼市迎来两大利好政策... 作者:暴哥 来源:暴财经pro 同志们,2025年要过去了! 今年,各位在股市里应该收获不少,把过去...
国台办回应台湾网红“馆长”大陆... 12月31日,国台办举行例行新闻发布会,国台办发言人张晗就近期两岸热点问题回答记者提问。 有记者提问...
中钢天源:股东中钢热能院907... 雷达财经 文|冯秀语 编|李亦辉 12月30日,中钢天源(证券代码:002057)发布公告称,其控股...
宇树科技因侵权责任纠纷案件被起... 天眼查法律诉讼信息显示,近日,杭州宇树科技股份有限公司及邵某新增1条开庭公告,原告为孙某,涉及侵权责...
今日视点:“制度创新+科技突破... 2025年,A股市场交易活跃度持续提升。截至12月30日,全年累计成交金额达417.8万亿元,同比增...
专业文章丨第二顺位抵押权人实现... 【珠海律师、珠海法律咨询、珠海律师事务所、京师律所、京师珠海律所】 (本文转载自北京市京师郑州律师事...
企业就网络谣言报案并追究法律责... 2025-12-31 09:41:29 作者:狼叫兽 声明指出,目前相关网络平台已对上述不实信息进...