Oracle
 sql >> Database >  >> RDS >> Oracle

Aggiornamento della tabella partizionata Oracle

Qual è il problema che stai cercando di risolvere? Non ha senso eseguire UPDATE separati istruzioni su ciascuna partizione in un ciclo. Se vuoi davvero aggiornare ogni riga della tabella dove ab = 'c' , emetti un singolo UPDATE dichiarazione

UPDATE cdr_data cdt
   SET a = 'B'
 WHERE ab = 'c'

potenzialmente con un PARALLEL suggerimento che consentirebbe a Oracle di aggiornare più partizioni in parallelo.

Se vuoi davvero aggiornare ogni partizione in modo indipendente, avrebbe molto più senso farlo in base alle chiavi di partizione. Ad esempio, se la tua tabella ha partizioni giornaliere basate su una data

FOR i IN 1 .. <<number of daily partitions>>
LOOP
  UPDATE cdr_data cdt
     SET a = 'B'
   WHERE ab = 'c'
     AND partition_key = <<minimum date>> + i;
END LOOP;

Usando la partition( <<partition name>> ) la sintassi è l'ultima risorsa assoluta. Se sei veramente determinato a seguire quel percorso, dovresti usare l'SQL dinamico, costruendo l'istruzione SQL nel ciclo e usando EXECUTE IMMEDIATE o dbms_sql per eseguirlo.