Ще огранича критиката си, за да кажа, че дизайнът на вашата таблица не е нормализиран и не е много красив, но предполагам, че имате своите причини. Обикновено правя тези заявки за "завъртане", като използвам DECODE, комбиниран с обобщена колона, групиране по моя ключ - в този случай вашият псевдоключ, trunc(ID/100). Комбинирайте това със синтаксиса за актуализиране, който използва кортежи:
UPDATE Foo
SET (a, b, c, d)
= (w, x, y, z);
и получавате:
UPDATE KeyMap
SET
( key1
, key2
, key3
, key4
...
, key99
)
= ( SELECT MAX(decode(mod(ID, 100), 1, Key, NULL))
, MAX(decode(mod(ID, 100), 2, Key, NULL))
, MAX(decode(mod(ID, 100), 3, Key, NULL))
, MAX(decode(mod(ID, 100), 4, Key, NULL))
...
, MAX(decode(mod(ID, 100), 99, Key, NULL))
FROM Source
WHERE Trunc(Source.ID / 100) = KeyMap.batchId
GROUP BY Trunc(Source.ID / 100)
)
WHERE BatchId = <x>;