sql >> Database >  >> RDS >> Oracle

Oracle 10g PL/SQL- Selecteer resultaten als updatekolomwaarden

Ik zal mijn kritiek beperken om te zeggen dat je tafelontwerp niet genormaliseerd is en niet erg mooi is, maar ik neem aan dat je je redenen hebt. Ik doe deze "rotatie"-query's meestal door DECODE te gebruiken in combinatie met een geaggregeerde kolom, gegroepeerd op mijn sleutel - in dit geval uw pseudo-sleutel, trunc(ID/100). Combineer dat met de update-syntaxis die tupels gebruikt:

 UPDATE Foo
    SET (a, b, c, d)
      = (w, x, y, z);

en je krijgt:

  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>;


  1. mysql selecteer query waarbij datum =... geen gegevens retourneren

  2. Array doorgeven aan Oracle-procedure vanuit c#

  3. Probleem met Java-programma en mySQL-verbinding:geen geschikt stuurprogramma gevonden

  4. PHP PDO-uitzondering + waarschuwing op MySQL is verdwenen?