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

Opdaterer partitioneret tabel-oracle

Hvad er problemet, du forsøger at løse? Det giver ikke mening at køre separat UPDATE sætninger mod hver partition i en løkke. Hvis du virkelig ønsker at opdatere hver række i tabellen, hvor ab = 'c' , udsend bare en enkelt UPDATE erklæring

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

potentielt med en PARALLEL tip, der ville tillade Oracle at opdatere flere partitioner parallelt.

Hvis du virkelig, virkelig ønsker at opdatere hver partition uafhængigt, ville det give meget mere mening at gøre det baseret på partitionsnøglerne. For eksempel, hvis din tabel har daglige partitioner baseret på en dato

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;

Brug af partition( <<partition name>> ) syntaks er en absolut sidste udvej. Hvis du virkelig er fast besluttet på at gå ned ad den vej, skal du bruge dynamisk SQL, konstruere SQL-sætningen i løkken og bruge EXECUTE IMMEDIATE eller dbms_sql for at udføre det.



  1. Diagnosticering af dødvande i SQL Server 2005

  2. Hvor klausulen virker, virker ikke på tinyint

  3. Bestem logik for MySQL Select - Reservationssystem

  4. Repository - bestil efter i indbygget forespørgsel virker ikke