Какъв е проблемът, който се опитвате да разрешите? Няма смисъл да се изпълнява отделно UPDATE
изрази срещу всеки дял в цикъл. Ако наистина искате да актуализирате всеки ред в таблицата, където ab = 'c'
, просто издайте една единствена UPDATE
изявление
UPDATE cdr_data cdt
SET a = 'B'
WHERE ab = 'c'
потенциално с PARALLEL
намек, който ще позволи на Oracle да актуализира няколко дяла паралелно.
Ако наистина, наистина искате да актуализирате всеки дял независимо, би било много по-логично да го направите въз основа на ключовете на дяла. Например, ако вашата таблица има дневни дялове въз основа на дата
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;
Използване на partition( <<partition name>> )
синтаксисът е абсолютна крайна мярка. Ако наистина сте решени да тръгнете по този път, ще трябва да използвате динамичен SQL, като конструирате SQL оператора в цикъла и използвате EXECUTE IMMEDIATE
или dbms_sql
за да го изпълните.