表A的 ANO欄位用 xxx||xxx||xxxx||變陣列成, 變數是用一個加密的程序生成的,現在編號生成出現了重復, 我想把有重復的編號重新生成, 也就是 回圈修改 重復的ANO = 現在ANO的前X位 || 呼叫變數生成程序。
uj5u.com熱心網友回復:
樓主說你的具體問題,實際操作和你的描述是一樣的。uj5u.com熱心網友回復:
給出具體的資料示例及期望結果uj5u.com熱心網友回復:
我是不大會寫,邏輯大概就是這樣的uj5u.com熱心網友回復:
資料例如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
uj5u.com熱心網友回復:
我這邊有個沒寫好的方法Declare
Temp varchar2(4096)
Begin
Loop回圈(
應在查詢到的重復資料里回圈,這塊不會寫)
呼叫生成編號方法f 得到編號 temp;
Update a set a.ano=substr(a.ano,0,10)//temp;
Commit;
End loop;
End;
大概就是這個意思
uj5u.com熱心網友回復:
如果都這樣,你只要截取后面十位然后group by 。 having count(*)>1 就行了呀uj5u.com熱心網友回復:
看錯了你是改資料,先查出最大的一個值為多少, 然后寫個游標查出重復的資料rowid(可以用分析函式查詢),然后用最大的值每次回圈+1 updateuj5u.com熱心網友回復:
不會,沒懂uj5u.com熱心網友回復:
我寫好了,謝謝好心人轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/103448.html
標籤:高級技術
上一篇:有沒有比較難的SQL
