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.