Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Atualizando o oráculo de tabela particionada


Qual é o problema que você está tentando resolver? Não faz sentido executar UPDATE separado instruções em cada partição em um loop. Se você realmente deseja atualizar todas as linhas da tabela em que ab = 'c' , basta emitir um único UPDATE declaração
UPDATE cdr_data cdt
   SET a = 'B'
 WHERE ab = 'c'

potencialmente com um PARALLEL dica que permitiria ao Oracle atualizar várias partições em paralelo.

Se você realmente deseja atualizar cada partição independentemente, faria muito mais sentido fazê-lo com base nas chaves de partição. Por exemplo, se sua tabela tiver partições diárias com base em uma data
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;

Usando a partition( <<partition name>> ) sintaxe é um último recurso absoluto. Se você estiver realmente determinado a seguir esse caminho, precisará usar SQL dinâmico, construindo a instrução SQL no loop e usando EXECUTE IMMEDIATE ou dbms_sql para executá-lo.