Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Aktualisieren des Oracles für partitionierte Tabellen

Was ist das Problem, das Sie zu lösen versuchen? Es macht keinen Sinn, ein separates UPDATE auszuführen Anweisungen für jede Partition in einer Schleife. Wenn Sie wirklich jede Zeile in der Tabelle aktualisieren möchten, wobei ab = 'c' , geben Sie einfach ein einzelnes UPDATE aus Erklärung

UPDATE cdr_data cdt
   SET a = 'B'
 WHERE ab = 'c'

möglicherweise mit einem PARALLEL Hinweis, der es Oracle ermöglichen würde, mehrere Partitionen parallel zu aktualisieren.

Wenn Sie wirklich, wirklich jede Partition unabhängig aktualisieren möchten, wäre es viel sinnvoller, dies auf der Grundlage der Partitionsschlüssel zu tun. Zum Beispiel, wenn Ihre Tabelle tägliche Partitionen basierend auf einem Datum hat

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;

Verwenden der partition( <<partition name>> ) Syntax ist ein absolut letzter Ausweg. Wenn Sie diesen Weg wirklich gehen wollen, müssen Sie dynamisches SQL verwenden, die SQL-Anweisung in der Schleife erstellen und EXECUTE IMMEDIATE verwenden oder dbms_sql um es auszuführen.