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.