id 起始编号 结束编号 数量 父id 所属单位
1 00001 01000 1000 0 省级一
2 01001 10000 8999 0 省级二
3 00001 00500 500 1 市级一
4 00501 00600 100 1 市级二
5 00601 00900 300 1 市级三
6 00901 01000 100 1 市级四
7 00601 00750 150 5 县级一
8 00751 00900 150 5 县级二需求是:
管理员想要将某一号段从已分配好的号码段中收回,再分给其他单位,
如要从id为1的号码段中收回一部分号码(00701-00800)分到省级三,那么其下级各号段只要有此号段中的号码,
就要断开分段,并更新id及数量,那么可能从中间分开|两头分开,或者被包含而完全被收回重分配到另一单位.
如下,结果应该为:
id 起始编号 结束编号 数量 父id 所属单位
1 00001 00700 700 0 省级一
2 01001 10000 8999 0 省级二
3 00001 00500 500 1 市级一
4 00501 00600 100 1 市级二
5 00601 00700 100 1 市级三
6 00901 01000 100 1 市级四
7 00601 00700 100 5 县级一
8 00801 00900 100 5 县级二
9 00801 01000 200 0 省级一
10 00801 00900 100 1 市级三
11 00701 00800 100 0 省级三求一oracle Sql高效递归算法代码.
注:此模式数据量大,层次深且不固定
1 00001 01000 1000 0 省级一
2 01001 10000 8999 0 省级二
3 00001 00500 500 1 市级一
4 00501 00600 100 1 市级二
5 00601 00900 300 1 市级三
6 00901 01000 100 1 市级四
7 00601 00750 150 5 县级一
8 00751 00900 150 5 县级二需求是:
管理员想要将某一号段从已分配好的号码段中收回,再分给其他单位,
如要从id为1的号码段中收回一部分号码(00701-00800)分到省级三,那么其下级各号段只要有此号段中的号码,
就要断开分段,并更新id及数量,那么可能从中间分开|两头分开,或者被包含而完全被收回重分配到另一单位.
如下,结果应该为:
id 起始编号 结束编号 数量 父id 所属单位
1 00001 00700 700 0 省级一
2 01001 10000 8999 0 省级二
3 00001 00500 500 1 市级一
4 00501 00600 100 1 市级二
5 00601 00700 100 1 市级三
6 00901 01000 100 1 市级四
7 00601 00700 100 5 县级一
8 00801 00900 100 5 县级二
9 00801 01000 200 0 省级一
10 00801 00900 100 1 市级三
11 00701 00800 100 0 省级三求一oracle Sql高效递归算法代码.
注:此模式数据量大,层次深且不固定
是全部随ID150迁移到B下面吗?若不迁移,岂不是引起了歧义?
select id,00801,endNo,数量,父id,所属单位 from yourTable
where startNo<00701 and endNo>00800update yourTable
set endNo=00700
where startNo<00701 and endNo>=00701update yourTable
set startNo=00801
where startNo<=00800 and endNo>00800 and startNo>=00701delete from yourTable
where startNo>=00701 and endNo<=00800commit transaction
另外还需要加入插入新数据的insert语句。
我手头没环境,你自己试试先。
id 起始编号 结束编号 数量 父id 所属单位
0 00001 10000 10000 null 高级一
1 00001 01000 1000 0 省级一
2 01001 10000 9000 0 省级二
3 00001 00500 500 1 市级一
4 00501 00600 100 1 市级二
5 00601 00900 300 1 市级三
6 00901 01000 100 1 市级四
7 00601 00750 150 5 县级一
8 00751 00900 150 5 县级二 照你的解决方法,"高级"中的数据将也会被"误处理"了,怎么才能解决这个问题呢?