oracle数据库,树形结构维护,添加字段值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle数据库,树形结构维护,添加字段值相关的知识,希望对你有一定的参考价值。

一张表 三个字段,一个是NO 一个是NAME 还有个字段 是SUPERNAME
NO字段 分别有 3位数字,5位数字,7为数字,9位数字 写sql语句插入,要求将NO字段是三位数字的 supername添加成自己本身的NAME,其他5,7,9为数字的NO字段里面的superName 添加成跟自己前3位数字一样的NAME,数据都是树形结构的

参考技术A 为什么这样设计?我认为是设计上不太好。问题的本质是劳动街的爸爸是南岗区,南岗区的爸爸是哈尔滨,哈尔滨的爸爸是黑龙江,这个问题的实质是找到最上层的节点。
建议你首先学习一下Oralce独有的ConnectBy查询。特别是level什么的虚拟字段要搞懂。
table结构修改成:地区代码 父地区代码 地区名称 足够了
然后通过connect by 地区代码=父代码 找到root的这个记录的地区名字,问题解决
现在这个结构,假设不找黑龙江,要找到哈尔滨,得了,要吐血了。
===追加一下,假设表已经有了,可以通过视图修改成父,子结构。用字符函数截取,得到父地区的邮编,同样也能解决问题。这样做性能不好,会大量的全表扫描。性能的根本果然在于设计。
参考技术B 你现在是不是已经知道了A.B字段要生产C字段?
select t1.A,t1.B,t2.B C
from
(select A,B ,
substr(A,1,length(A)-2) D
from TABLE) t1,table t2
where t1.D= t2.A;追问

要写一个语句,把c字段添加进去,,,要update 你一上来就select ··· 无语···希望重新提供··

追答

那你可以先把C字段设置为空值,更新进去就可以了吧。
先建立一个临时表
create table1 as
select t1.A,t1.B,t2.B C
from
(select A,B ,
substr(A,1,length(A)-2) D
from TABLE) t1,table t2
where t1.D= t2.A;

update table A set C = (select b.C from table1 b WHERE a.a = b.a);
commit;

追问

大哥,就是直接update就行,c字段本身就是空,我写了几条数据是为了让你看明白。。。

JeeSite 4.x 树形结构的表设计和用法

有些同仁对于 JeeSite 4 中的树表设计不太了解,本应简单的方法就可实现,却写了很多复杂的语句和代码,所以有了这篇文章。

在 JeeSite 4 中的树表设计我还是相对满意的,这种设计比较容易理解,不会太依赖数据库的语法,对兼容多数据库比较好。相比网上大牛的左右值树设计简单了很多,并且可随时调换父节点,并级联更新所有子节点数据。

看下表字段说明我们发现除了父级节点外又多了很多辅助字段,这写字段的维护可能会稍微影响我们的插入和更新性能, 但是这将极大的简化了我们的查询,并不限深度。废话不多说,下面我们一同来就来看看都有哪些好处。

树表字段说明

字段名说明
xxx_code节点编码(xxx表示用户自定义名称)
xxx_name节点名称(xxx表示用户自定义名称)
以下是树表关键字段:
parent_code节点上级编码
parent_codes节点所有上级编码(快速检索下级节点)
tree_sort当前层级排序号(decimal类型)
tree_sorts树节点的完整排序号,10位数字组成(快速整树排序)
tree_leaf是否是末级,是否叶子节点(0:否,1:是,char类型)
tree_level节点层次级别(从0开始,decimal类型,快速分级查询,根据层级缩进)
tree_names节点的全名称(用“/”分隔,快速获取当前节点完整路径)
以下是树表可选字段:
status节点状态(0:正常,1:删除,2:停用)
create_by创建者用户编码
create_date数据创建时间
update_by更新者用户编码
update_date数据更新时间

下面以区域树表举例

定义实体Entity

用户自定义的节点编码是area_code

以上是关于oracle数据库,树形结构维护,添加字段值的主要内容,如果未能解决你的问题,请参考以下文章

Oracle查询直观展示树形结构数据

JeeSite 4.x 树形结构的表设计和用法

oracle添加单边服务名

oracle sql语句 显示树形结构

Access数据库通过ODBC导出到Oracle的两个小问题ora-24801Ora-01401

什么是“oracle ORA-01722”无效数字?