sql >> Databasteknik >  >> RDS >> Oracle

Uppdaterar partitionerat tabell-oracle

Vad är problemet som du försöker lösa? Det är inte meningsfullt att köra separat UPDATE uttalanden mot varje partition i en loop. Om du verkligen vill uppdatera varje rad i tabellen där ab = 'c' , utfärda bara en enda UPDATE uttalande

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

potentiellt med en PARALLEL ledtråd som skulle tillåta Oracle att uppdatera flera partitioner parallellt.

Om du verkligen, verkligen vill uppdatera varje partition oberoende, skulle det vara mycket mer meningsfullt att göra det baserat på partitionsnycklarna. Till exempel, om din tabell har dagliga partitioner baserade på ett 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;

Använda partition( <<partition name>> ) syntax är en absolut sista utväg. Om du verkligen är fast besluten att gå in på den vägen, måste du använda dynamisk SQL, konstruera SQL-satsen i slingan och använda EXECUTE IMMEDIATE eller dbms_sql för att utföra det.



  1. Tabelluppdatering på PK och ett annat fält i MySQL är sporadiskt långsam

  2. PDO bind_param är odefinierad metod

  3. sekvensskapande i oracle

  4. Magento-produkter importeras från databasen med SQL-fråga