1. 程式人生 > >Oracle批量修改

Oracle批量修改

問題:根據唯一欄位編碼修改其它欄位,修改部分資料,數量在上萬條資料,資料大,一開始就卡死了!笨辦法,一條一條修改不知可年可月啊。其他方法個人原因實在是無能為力。如下:

update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-2V';
update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-2W';
update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-2X';
update ka02_new set
aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-2Y';
update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-2Z'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-31'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-32'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-33'
;
update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-34'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-35'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-36'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-37'; update ka02_new set aka065=1,aka166=1
where aka060='X-P02CA-A010-A001-38';
update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-39'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-3A'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-3B'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-3C'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-3D'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-3E'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-3F'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-3G'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-3H'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-3I'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-3J'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-3K'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-3L'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-3M'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-3N'; update ka02_new set aka065=1,aka166=1 where aka060='X-P02CA-A010-A001-3O'; ....

百度結果:百度了一下,很多解決方案,有的寫的很粗糙,完全不理解,也許自己水平問題。有的是自己真的看不懂,個人水平跟不上。

解決方案:最後的解決辦法,還是老辦法,就是新建一張臨時表(表B:a_2017 ),把所修改的唯一欄位編碼和修改後的資料放在B表。sql大體如下(原表A:ka02_new ,唯一欄位aka060 ,修改的欄位分別為aka065 和aka166 ):

update ka02_new b
   set b.aka065 =
       (SELECT a.aka065 FROM a_2017 a WHERE a.aka060 = b.aka060),
       b.aka166 =
       (SELECT a.aka166 FROM a_2017 a WHERE a.aka060 = b.aka060)
 WHERE b.aka060 in (SELECT a.aka060 FROM a_2017 a);

最後,自己比較蒙圈的事,有啥好辦法?