oracle 对查询结果集循环修改

时间:2022-04-05 23:50:45
表A的 ANO字段用 xxx||xxx||xxxx||变量组成,  变量是用一个加密的过程生成的,现在编号生成出现了重复,  我想把有重复的编号重新生成,  也就是  循环修改 重复的ANO = 现在ANO的前X位 || 调用变量生成过程。

9 个解决方案

#1


楼主说你的具体问题,实际操作和你的描述是一样的。

#2


给出具体的数据示例及期望结果

#3


引用 1楼卖水果的net 的回复:
楼主说你的具体问题,实际操作和你的描述是一样的。
我是不大会写,逻辑大概就是这样的

#4


数据例如
10360073070002992320
10360073070002992321
10360073070002992322
10360073070002992322
10360073070002992323
10360073070002992323
10360073070002992324
10360073070002992325
10360073070002992325



尾号22.23.25有重复,现在需要修改,
前面1036007307不变,后面十位通过调用一个加密的方法 得出输出参数生成。
例如想要得到结果为:
10360073070002992320
10360073070002992321
10360073070002992322  或者此条也重置
1036007307+重置编号1
10360073070002992323  或者此条也重置
1036007307+重置编号2
10360073070002992324
10360073070002992325  或者此条也重置
1036007307+重置编号3

#5


我这边有个没写好的方法
Declare 
Temp varchar2(4096)
Begin
Loop循环(
应在查询到的重复数据里循环,这块不会写)
调用生成编号方法f 得到编号 temp;
Update a set a.ano=substr(a.ano,0,10)//temp;
Commit;
End loop;
End;
大概就是这个意思

#6


如果都这样,你只要截取后面十位然后group by 。 having count(*)>1 就行了呀

#7


看错了你是改数据,先查出最大的一个值为多少, 然后写个游标查出重复的数据rowid(可以用分析函数查询),然后用最大的值每次循环+1 update

#8


引用 7楼sxq129601 的回复:
看错了你是改数据,先查出最大的一个值为多少, 然后写个游标查出重复的数据rowid(可以用分析函数查询),然后用最大的值每次循环+1 update
不会,没懂

#9


我写好了,谢谢好心人

#1


楼主说你的具体问题,实际操作和你的描述是一样的。

#2


给出具体的数据示例及期望结果

#3


引用 1楼卖水果的net 的回复:
楼主说你的具体问题,实际操作和你的描述是一样的。
我是不大会写,逻辑大概就是这样的

#4


数据例如
10360073070002992320
10360073070002992321
10360073070002992322
10360073070002992322
10360073070002992323
10360073070002992323
10360073070002992324
10360073070002992325
10360073070002992325



尾号22.23.25有重复,现在需要修改,
前面1036007307不变,后面十位通过调用一个加密的方法 得出输出参数生成。
例如想要得到结果为:
10360073070002992320
10360073070002992321
10360073070002992322  或者此条也重置
1036007307+重置编号1
10360073070002992323  或者此条也重置
1036007307+重置编号2
10360073070002992324
10360073070002992325  或者此条也重置
1036007307+重置编号3

#5


我这边有个没写好的方法
Declare 
Temp varchar2(4096)
Begin
Loop循环(
应在查询到的重复数据里循环,这块不会写)
调用生成编号方法f 得到编号 temp;
Update a set a.ano=substr(a.ano,0,10)//temp;
Commit;
End loop;
End;
大概就是这个意思

#6


如果都这样,你只要截取后面十位然后group by 。 having count(*)>1 就行了呀

#7


看错了你是改数据,先查出最大的一个值为多少, 然后写个游标查出重复的数据rowid(可以用分析函数查询),然后用最大的值每次循环+1 update

#8


引用 7楼sxq129601 的回复:
看错了你是改数据,先查出最大的一个值为多少, 然后写个游标查出重复的数据rowid(可以用分析函数查询),然后用最大的值每次循环+1 update
不会,没懂

#9


我写好了,谢谢好心人