sql >> Database >  >> RDS >> Oracle

Bijwerken van gepartitioneerde tabel Oracle

Wat is het probleem dat je probeert op te lossen? Het heeft geen zin om een ​​aparte UPDATE . uit te voeren statements tegen elke partitie in een lus. Als u echt elke rij in de tabel wilt bijwerken waar ab = 'c' , geef gewoon een enkele UPDATE . uit verklaring

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

mogelijk met een PARALLEL hint waarmee Oracle meerdere partities parallel kan updaten.

Als je echt, echt elke partitie onafhankelijk wilt bijwerken, zou het veel logischer zijn om dit te doen op basis van de partitiesleutels. Als uw tafel bijvoorbeeld dagelijkse partities heeft op basis van een datum

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;

De partition( <<partition name>> ) . gebruiken syntaxis is een absoluut laatste redmiddel. Als je echt vastbesloten bent om dat pad te gaan, moet je dynamische SQL gebruiken, de SQL-instructie in de lus construeren en EXECUTE IMMEDIATE gebruiken of dbms_sql om het uit te voeren.



  1. VOEG een reëel getal in een kolom in op basis van andere kolommen OUDE INSERT's

  2. Hoe te migreren van MSSQL naar MySQL

  3. Hoe maak je een draaitabel in MySQL

  4. PostgreSQL-aggregatiefunctie over bereik