当前位置: 首页 > article >正文

oracle使用动态sql将多层级组织展平

ERP或者其他企业管理软件中都会有一张组织机构表,可以写固定sql的方式将其展平获取组织表中的字段信息,如负责人、上级组织负责人、分管领导、成立时间等。但是这种方式有个缺陷,就是如果只写到处理4个层级,那么后期层级增多就无法处理。如何灵活处理,实现一次写好,即使层级增多,也可以正常处理呢。

思路:通过展平,可以知道层级(depth),然后根据层级,使用动态sql拼接查询语句字符串。比如,拿到的是第三层的组织名称,而其负责人信息存储在上上级组织即第一层组织的负责人字段中。循环3次拼接一个完整的sql。大致形式如下:

select from depts_level t1 -- 末级(即第三层)

left join depts_level t2 -- 二层

left join depts_level t3 -- 一层

共三步,具体如下

1 测试数据

如下

  CREATE OR REPLACE VIEW DEPTS AS

  select 1 id, 'cc' name, null parent_id, 'xx' mgr from dual

union all

select 11 id, 'cc_1' name, 1 parent_id, null mgr from dual

union all

select 111 id, 'cc_1_1' name, 11 parent_id, null mgr from dual

union all

select 12 id, 'cc_2' name, 1 parent_id, null mgr from dual

union all

select 2 id, 'yy' name, null parent_id, 'hh' mgr from dual

union all

select 21 id, 'yy_1' name, 2 parent_id, null mgr from dual

union all

select 22 id, 'yy_2' name, 2 parent_id, null mgr from dual

union all

select 23 id, 'yy_3' name, 2 parent_id, null mgr from dual

union all

select 24 id, 'yy_4' name, 2 parent_id, null mgr from dual;

2 组织展平

代码如下

  CREATE OR REPLACE DEPT_LEVEL AS

  select id,name,parent_id,mgr,level deptlevel from depts --where

start with parent_id is null

connect by prior id = parent_id;

展平效果

3 动态sql

代码如下

效果


http://www.kler.cn/a/549636.html

相关文章:

  • git仓库拉取最新更改
  • 拉分支提示git变基全套解决方案
  • Day65_20250213图论part9_dijkstra(堆优化版)|Bellman_ford算法精讲
  • 神经网络新手入门(3)光明顶复出(2006-2012)
  • 网络共享基于什么原理,为什么MAC可以编辑局域网的windows系统文件?
  • 从零开始在Windows系统上搭建一个node.js后端服务项目
  • 基于Ubuntu+vLLM+NVIDIA T4高效部署DeepSeek大模型实战指南
  • SQL注入之布尔盲注+时间盲注
  • 【数据库维护】Clickhouse数据库维护关键系统表相关指标说明,支撑定位慢SQL及多实例场景下分析各实例运行情况
  • Qt使用pri和pro文件进行模块化编程
  • 机器学习·逻辑回归
  • 华为昇腾920b服务器部署DeepSeek翻车现场
  • IPv4 协议和TCP 协议的区别
  • Ruby 文件的输入与输出
  • 【16】思科AireOS:创建使用 LWA 认证的 WLAN
  • 图论入门算法:拓扑排序(C++)
  • 【华为OD机考】华为OD笔试真题解析(7)--基站维修工程师
  • 《qt open3d网格平滑》
  • 143,【3】 buuctf web [GYCTF2020]EasyThinking
  • 【第10章:自然语言处理高级应用—10.1 命名实体识别(NER)与关系抽取的实现与应用】