平时在处理树形结构的关系的时候,是一个很复杂的事情,我们可能通过程序代码去一层一层的遍历父节点或者子节点,这样做的缺点很明显,效率不高而且操作复杂度比较大。而当我们在使用Oracle数据库的时候,我们可以有一种简单解决方法,如下:
1.首先创建一张表,保存父子关系
drop table tmp_node;
create table tmp_node(id varchar2(500),p_id varchar2(500));
2.向表中插入数据
insert into tmp_node(p_id,id) values(null,1);
insert into tmp_node(p_id,id) values(1,'1-1');
insert into tmp_node(p_id,id) values(1,'1-2');
insert into tmp_node(p_id,id) values('1-1','1-1-1');
insert into tmp_node(p_id,id) values('1-1','1-1-2');
insert into tmp_node(p_id,id) values('1-2','1-2-1');
3.查看表中数据
select * from tmp_node;
编号 |
P_ID |
ID |
1 |
|
1 |
2 |
1 |
1-1 |
3 |
1 |
1-2 |
4 |
1-1 |
1-1-1 |
5 |
1-1 |
1-1-2 |
6 |
1-2 |
1-2-1 |
4.创建视图(这一步最重要)
create or replace view tmp_node_view as
select distinct level lvl,connect_by_root(id) leaf_id,t.*
from tmp_node t
connect by prior t.p_id = t.id;
5.查看视图数据
select * form tmp_node_view order by leaf_id,lvl;
编号 |
LVL |
LEAF_ID |
ID |
P_ID |
1 |
1 |
1 |
1 |
|
2 |
1 |
1-1 |
1-1 |
1 |
3 |
2 |
1-1 |
1 |
|
4 |
1 |
1-1-1 |
1-1-1 |
1-1 |
5 |
2 |
1-1-1 |
1-1 |
1 |
6 |
3 |
1-1-1 |
1 |
|
7 |
1 |
1-1-2 |
1-1-2 |
1-1 |
8 |
2 |
1-1-2 |
1-1 |
1 |
9 |
3 |
1-1-2 |
1 |
|
10 |
1 |
1-2 |
1-2 |
1 |
11 |
2 |
1-2 |
1 |
|
12 |
1 |
1-2-1 |
1-2-1 |
1-2 |
13 |
2 |
1-2-1 |
1-2 |
1 |
14 |
3 |
1-2-1 |
1 |
|
6.使用说明
主要使用的leaf_id和id两个字段的值。
字段说明:lvl字段代表节点的深度,leaf_id代表叶节点。p_id父节点id,id节点本生id。
当需要知道一个节点有哪些父节点的时候,只需要根据leaf_id,查询id字段即可:
select * from tmp_node_view where leaf_id = '1-2-1';
编号 |
LVL |
LEAF_ID |
ID |
P_ID |
1 |
1 |
1-2-1 |
1-2-1 |
1-2 |
2 |
3 |
1-2-1 |
1 |
|
3 |
2 |
1-2-1 |
1-2 |
1 |
当需要知道一个节点有哪些子节点的时候,只需要根据id查询leaf_id即可:
select * from tmp_node_view where id = '1-2';
编号 |
LVL |
LEAF_ID |
ID |
P_ID |
1 |
1 |
1-2 |
1-2 |
1 |
2 |
2 |
1-2-1 |
1-2 |
1 |
注意:所有的父节点和子节点的查询,都是包含自身节点的。
相关推荐
主要给大家介绍了关于Oracle如何通过递归查询父子兄弟节点的相关资料,递归查询对各位程序员来说应该都不陌生,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
Oracle12c双节点RAC在Linux7环境下的部署,本文档适用对象为 DBA 或具备一定 Linux/Oracle 基础知识的人员, 对 Oracle Enterprise Linux 操作系统下的 Oracle12.2.0.1 双节点 RAC 在 OEL 7.4 环境下的部署及初始化...
oracle 如何递归查询父子关系。经常用于构造树结构
ORACLE RAC 节点有关的操作 srvctl crs_stop crs_stat crsctl
Oracle11g数据库节点扩容和删除.
根据父子递归关系生成类似于word的目录,代码包括建表语句,插入语句,及统计语句,建表语句中少写了一个s,表名应该是tb_rules
Oracle RAC 删除节点配置手册
实测oracle两节点rac11.2.0.1.0升级到11.2.0.4.0,能力有限,欢迎执指正
4 节点 ORACLE RAC 安装和配置
Oracle_多节点RAC_白皮书.pdf
在多数业务中,Oracle 真正应用集群 (RAC) ...当节点/实例变成可用状态后,Oracle 即可通过必需的几个设置步骤来包含这个即插即用功能。 在本文中,我将讨论将节点添加到现有 Oracle RAC 10g 第 2 版集群所需的步骤。
oracleRAC9 单节点安装文档
oracle详细表结构关系图,实例,图解
oracle ebs 多个应用节点安装,做F5前必看文档。提供单数据库节点,多个应用节点的安装。
运维Oracle RAC 如果遇到故障,如何删除节点再添加节点,资源不足如何扩容,本篇文章告诉你。
Oracle12C RAC节点损坏恢复方案研究.pdf
RAC-1 宕机,RAC-2正常,在RAC-2节点上,删除RAC-1节点步骤。
Oracle11g单节点centos7的详细安装步骤,有截图,对着这个来,都能安装好
Oracle 11GR2 RAC节点crash故障分析
准备一台服务器,设置好环境变量,以及ASM 存储,OCFS存储,/etc/hosts,SSH ...由于增加节点,ORACLE 要求增加的节点机器需要有 CRS_HOME,ORACLE_HOME的拷贝,所以可以通过SCP命令从已存在的RAC节点拷贝 这2个目录。