Quel est le problème que vous essayez de résoudre ? Cela n'a pas de sens d'exécuter une UPDATE
séparée instructions sur chaque partition dans une boucle. Si vous voulez vraiment mettre à jour chaque ligne du tableau où ab = 'c'
, émettez juste un seul UPDATE
déclaration
UPDATE cdr_data cdt
SET a = 'B'
WHERE ab = 'c'
potentiellement avec un PARALLEL
indice qui permettrait à Oracle de mettre à jour plusieurs partitions en parallèle.
Si vous voulez vraiment, vraiment mettre à jour chaque partition indépendamment, il serait beaucoup plus logique de le faire en fonction des clés de partition. Par exemple, si votre table a des partitions quotidiennes basées sur une date
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;
Utilisation de la partition( <<partition name>> )
la syntaxe est un dernier recours absolu. Si vous êtes vraiment déterminé à emprunter cette voie, vous devez utiliser SQL dynamique, en construisant l'instruction SQL dans la boucle et en utilisant EXECUTE IMMEDIATE
ou dbms_sql
pour l'exécuter.