sql >> Base de Datos >  >> RDS >> Oracle

Actualización de Oracle de tablas particionadas

¿Cuál es el problema que estás tratando de resolver? No tiene sentido ejecutar UPDATE por separado declaraciones contra cada partición en un bucle. Si realmente desea actualizar cada fila de la tabla donde ab = 'c' , solo emita un único UPDATE declaración

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

potencialmente con un PARALLEL pista que permitiría a Oracle actualizar varias particiones en paralelo.

Si realmente desea actualizar cada partición de forma independiente, tendría mucho más sentido hacerlo en función de las claves de partición. Por ejemplo, si su tabla tiene particiones diarias basadas en una fecha

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;

Uso de la partición partition( <<partition name>> ) la sintaxis es un último recurso absoluto. Si realmente está decidido a seguir ese camino, necesitaría usar SQL dinámico, construir la instrucción SQL en el ciclo y usar EXECUTE IMMEDIATE o dbms_sql para ejecutarlo.