Oracle
 sql >> Base de données >  >> RDS >> Oracle

Mise à jour d'oracle de table partitionnée

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.