首页 > 软件开发 > ORACLE >

Oracle函数之SYS_CONNECT_BY_PATH使用及问题

来源:互联网 2023-03-16 23:58:28 354

最近在做一需求:需要列出所有的部门、部门全称、ID等字段内容。但是之前的同事在做数据库设计时未增加机构全称这一字段,因此需要通过SQL拼接此字段。拼接的过程用到了函数SYS_CONNECT_BY_PATH,也遇到了一些问题,把这个过程分享给大家~FYU办公区 - 实用经验教程分享!

工具/原料

  • 电脑
  • oracle、pl/sql客户端

SYS_CONNECT_BY_PATH使用

  • 1

    1、首先我们先看下表结构以及需要达到的目标:FYU办公区 - 实用经验教程分享!

    表结构如下图,可以看到未包含机构全称字段;需求为查询所有组织机构的机构全称。FYU办公区 - 实用经验教程分享!

    Oracle函数之SYS_CONNECT_BY_PATH使用及问题FYU办公区 - 实用经验教程分享!

  • 2

    2、因为组织机构的层级数不一定,所以不能简单的使用ID、上级机构ID做单表连接查询,因此我们需要使用SYS_CONNECT_BY_PATH函数。FYU办公区 - 实用经验教程分享!

    SYS_CONNECT_BY_PATH函数官方的解释如下:FYU办公区 - 实用经验教程分享!

    Oracle函数之SYS_CONNECT_BY_PATH使用及问题FYU办公区 - 实用经验教程分享!

  • 3

    3、根据需求、函数说明拼写后的SQL:FYU办公区 - 实用经验教程分享!

    select ORG_NAME,FYU办公区 - 实用经验教程分享!

    substr(SYS_CONNECT_BY_PATH(ORG_NAME, '/'), 9)FYU办公区 - 实用经验教程分享!

    from t_ituser_org tFYU办公区 - 实用经验教程分享!

    where t.org_type = '0'FYU办公区 - 实用经验教程分享!

    START WITH PARENT_ORG_ID IS NULLFYU办公区 - 实用经验教程分享!

    CONNECT BY PRIOR ORG_ID = PARENT_ORG_IDFYU办公区 - 实用经验教程分享!

    大家在SQL可以单独使用SYS_CONNECT_BY_PATH(ORG_NAME, '/')方法即可。增加substr是为了将机构全称中的公共内容去除。FYU办公区 - 实用经验教程分享!

    Oracle函数之SYS_CONNECT_BY_PATH使用及问题FYU办公区 - 实用经验教程分享!

  • 3本页面非法爬取自百度经验
  • 可能出现的问题

  • 1

    1、在某次执行此SQL时,报了一个SQL错误,报错内容如下:FYU办公区 - 实用经验教程分享!

    Oracle函数之SYS_CONNECT_BY_PATH使用及问题FYU办公区 - 实用经验教程分享!

  • 2

    2、根据错误提示,猜想为:某条记录的该字段内容包含有我们的分割符“/”,经过查询我们确实有几条数据的部门名称包含/字符。FYU办公区 - 实用经验教程分享!

    Oracle函数之SYS_CONNECT_BY_PATH使用及问题FYU办公区 - 实用经验教程分享!

  • 3

    3、修改方案:改用其他的分割符号,例如“||”等;FYU办公区 - 实用经验教程分享!

    为了方便查询,我们可使用此函数创建一个视图方便以后查询。FYU办公区 - 实用经验教程分享!

    Oracle函数之SYS_CONNECT_BY_PATH使用及问题FYU办公区 - 实用经验教程分享!

  • 注意事项

    • 希望帮助到大家~

    以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!FYU办公区 - 实用经验教程分享!


    标签: oracle函数数据库

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码