问题描述
嗨,
在浏览了很多以前的示例之后,我想从许多月亮之前使用的示例中背出来,并要求更改显示的结果。
https://asktom.oracle.com/pls/asktom/f%3Fp%3D100:11:0::::P11_QUESTION_ID:907278700346567560
ops $ tkyte % ORA11GR1> 选择substr( scbp,instr(scbp,'-',1,1)+ 1,instr(scbp,'-',1,2)-instr(scbp,'-',1,1)-1) l1,
2 substr( scbp,instr(scbp,'-',1,2) 1,instr(scbp,'-',1,3)-instr(scbp,'-',1,2)-1) l2,
3 substr( scbp,instr(scbp,'-',1,3) 1,instr(scbp,'-',1,4)-instr(scbp,'-',1,3)-1) l3,
4 substr( scbp,instr(scbp,'-',1,4) 1,instr(scbp,'-',1,5)-instr(scbp,'-',1,4)-1) l4,
5 substr( scbp,instr(scbp,'-',1,5) 1,instr(scbp,'-',1,6)-instr(scbp,'-',1,5)-1) l5,
6 substr( scbp,instr(scbp,'-',1,6) 1,instr(scbp,'-',1,7)-instr(scbp,'-',1,6)-1) l6
7来自 (
8选择系统连接路径 (儿童节点,'-') | | '-' scbp
9来自分支机构
10从PARENT_NODE = ''开始
11通过先验CHILD_NODE = PARENT_NODE连接
12)
13/
L1 L2 L3 L4 L5 L6
-
级别1
级别1 LEVEL2
级别1 LEVEL2 LEVEL3.1
级别1 LEVEL2 LEVEL3.1 LEVEL4.1
级别1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.1
级别1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.2
级别1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.2 LEVEL6.1
级别1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.2 LEVEL6.2
级别1 LEVEL2 LEVEL3.1 LEVEL4.2
级别1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.3
级别1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.3 LEVEL6.3
级别1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.3 LEVEL6.4
级别1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.4
级别1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.4 LEVEL6.5
级别1 LEVEL2 LEVEL3.2
级别1 LEVEL2 LEVEL3.3
级别1 LEVEL2 LEVEL3.3 LEVEL4.3
级别1 LEVEL2 LEVEL3.3 LEVEL4.3 LEVEL5.5
级别1 LEVEL2 LEVEL3.3 LEVEL4.3 LEVEL5.6
级别1 LEVEL2 LEVEL3.3 LEVEL4.4
级别1 LEVEL2 LEVEL3.3 LEVEL4.4 LEVEL5.7
级别1 LEVEL2 LEVEL3.3 LEVEL4.4 LEVEL5.8
如何仅返回级别1和级别2的值来创建缩短的层次结构路径?每个字段中的条目可以是不同的长度,因此字符限制并不理想。
Path result would be great if it could look like >级别1>LEVEL2
感谢您的任何帮助。
在浏览了很多以前的示例之后,我想从许多月亮之前使用的示例中背出来,并要求更改显示的结果。
https://asktom.oracle.com/pls/asktom/f%3Fp%3D100:11:0::::P11_QUESTION_ID:907278700346567560
ops $ tkyte % ORA11GR1> 选择substr( scbp,instr(scbp,'-',1,1)+ 1,instr(scbp,'-',1,2)-instr(scbp,'-',1,1)-1) l1,
2 substr( scbp,instr(scbp,'-',1,2) 1,instr(scbp,'-',1,3)-instr(scbp,'-',1,2)-1) l2,
3 substr( scbp,instr(scbp,'-',1,3) 1,instr(scbp,'-',1,4)-instr(scbp,'-',1,3)-1) l3,
4 substr( scbp,instr(scbp,'-',1,4) 1,instr(scbp,'-',1,5)-instr(scbp,'-',1,4)-1) l4,
5 substr( scbp,instr(scbp,'-',1,5) 1,instr(scbp,'-',1,6)-instr(scbp,'-',1,5)-1) l5,
6 substr( scbp,instr(scbp,'-',1,6) 1,instr(scbp,'-',1,7)-instr(scbp,'-',1,6)-1) l6
7来自 (
8选择系统连接路径 (儿童节点,'-') | | '-' scbp
9来自分支机构
10从PARENT_NODE = ''开始
11通过先验CHILD_NODE = PARENT_NODE连接
12)
13/
L1 L2 L3 L4 L5 L6
-
级别1
级别1 LEVEL2
级别1 LEVEL2 LEVEL3.1
级别1 LEVEL2 LEVEL3.1 LEVEL4.1
级别1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.1
级别1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.2
级别1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.2 LEVEL6.1
级别1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.2 LEVEL6.2
级别1 LEVEL2 LEVEL3.1 LEVEL4.2
级别1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.3
级别1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.3 LEVEL6.3
级别1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.3 LEVEL6.4
级别1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.4
级别1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.4 LEVEL6.5
级别1 LEVEL2 LEVEL3.2
级别1 LEVEL2 LEVEL3.3
级别1 LEVEL2 LEVEL3.3 LEVEL4.3
级别1 LEVEL2 LEVEL3.3 LEVEL4.3 LEVEL5.5
级别1 LEVEL2 LEVEL3.3 LEVEL4.3 LEVEL5.6
级别1 LEVEL2 LEVEL3.3 LEVEL4.4
级别1 LEVEL2 LEVEL3.3 LEVEL4.4 LEVEL5.7
级别1 LEVEL2 LEVEL3.3 LEVEL4.4 LEVEL5.8
如何仅返回级别1和级别2的值来创建缩短的层次结构路径?每个字段中的条目可以是不同的长度,因此字符限制并不理想。
Path result would be great if it could look like >级别1>LEVEL2
感谢您的任何帮助。
专家解答
我不太确定您在追求什么-因此,这是一个演示,以获取领先和落后的两个项目
SQL> @drop t Y1 Y2 -------------------------------------------------------------------------------------------- ------------------------- TABLE cascade constraints purge 1 row selected. Table dropped. SQL> SQL> create table t ( id int, par_id int ); Table created. SQL> SQL> insert into t 2 select rownum, decode(rownum,1,null,rownum-1) 3 from dual 4 connect by level <= 10; 10 rows created. SQL> SQL> select lpad(id,level*2) id, par_id, sys_connect_by_path(id,'~') tree 2 from t 3 start with par_id is null 4 connect by prior id = par_id; ID PAR_ID TREE ------------------------------ ---------- ------------------------------ 1 ~1 2 1 ~1~2 3 2 ~1~2~3 4 3 ~1~2~3~4 5 4 ~1~2~3~4~5 6 5 ~1~2~3~4~5~6 7 6 ~1~2~3~4~5~6~7 8 7 ~1~2~3~4~5~6~7~8 9 8 ~1~2~3~4~5~6~7~8~9 10 9 ~1~2~3~4~5~6~7~8~9~10 10 rows selected. SQL> SQL> with raw_data as 2 ( 3 select lpad(id,level*2) id, par_id, sys_connect_by_path(id,'~') tree 4 from t 5 start with par_id is null 6 connect by prior id = par_id 7 ) 8 select raw_data.*, 9 case when instr(tree,'~',1,3) > 0 then 10 substr(tree,1,instr(tree,'~',1,3)) 11 else 12 tree 13 end first_two, 14 case when regexp_count(tree,'~') > 1 then 15 substr(tree,instr(tree,'~',1,regexp_count(tree,'~')-1)) 16 else 17 tree 18 end last_two 19 from raw_data; ID PAR_ID TREE FIRST_TWO LAST_TWO ------------------------------ ---------- ------------------------------ -------------------- -------------------- 1 ~1 ~1 ~1 2 1 ~1~2 ~1~2 ~1~2 3 2 ~1~2~3 ~1~2~ ~2~3 4 3 ~1~2~3~4 ~1~2~ ~3~4 5 4 ~1~2~3~4~5 ~1~2~ ~4~5 6 5 ~1~2~3~4~5~6 ~1~2~ ~5~6 7 6 ~1~2~3~4~5~6~7 ~1~2~ ~6~7 8 7 ~1~2~3~4~5~6~7~8 ~1~2~ ~7~8 9 8 ~1~2~3~4~5~6~7~8~9 ~1~2~ ~8~9 10 9 ~1~2~3~4~5~6~7~8~9~10 ~1~2~ ~9~10 10 rows selected. SQL>复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
610次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
606次阅读
2025-04-15 17:24:06
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
500次阅读
2025-04-08 09:12:48
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
485次阅读
2025-04-20 10:07:02
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
466次阅读
2025-04-22 00:20:37
Oracle 19c RAC更换IP实战,运维必看!
szrsu
443次阅读
2025-04-08 23:57:08
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
439次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
435次阅读
2025-04-17 17:02:24
火焰图--分析复杂SQL执行计划的利器
听见风的声音
374次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
362次阅读
2025-04-15 14:48:05