Jeg vil begrænse min kritik til at sige, at dit borddesign ikke er normaliseret og ikke er særlig smukt, men jeg går ud fra, at du har dine grunde. Jeg laver typisk disse "rotations"-forespørgsler ved at bruge DECODE kombineret med en samlet kolonne, gruppering efter min nøgle - i dette tilfælde din pseudo-nøgle, trunc(ID/100). Kombiner det med opdateringssyntaksen, der bruger tupler:
UPDATE Foo
SET (a, b, c, d)
= (w, x, y, z);
og du får:
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>;