Pessoal, estou fazendo um DELETE e um INSERT:
EXECUTE IMMEDIATE 'delete...
EXECUTE IMMEDIATE 'insert...
O primeiro irá deletar 500.000 linhas e o segundo irá inserir 800.000 linhas.
Como eu faço para fazer um COMMIT a cada 3.000 linhas deletadas e inseridas?
EXECUTE IMMEDIATE
Exatamente! a clausula where e também a from.
- stcoutinho
- Moderador
- Mensagens: 850
- Registrado em: Qua, 11 Mai 2011 5:15 pm
- Localização: são Paulo - SP
Hum,
Você também poderia colocar dentro do EXECUTE IMMEDIATE um BLOCO ANONIMO PL/SQL, onde você poderia elaborar uma lógica completa para a limpeza/inclusão da tabela, com COMMIT a cada X registros.
Seria algo do tipo :
Este bloco PL/SQL "talvez" fosse mais performático se você usasse:
- Collections (FETCH ... BULK COLLECT .. LIMIT ... / FORALL);
- Variáveis Bind;
Abraços,
Sergio Coutinho
Você também poderia colocar dentro do EXECUTE IMMEDIATE um BLOCO ANONIMO PL/SQL, onde você poderia elaborar uma lógica completa para a limpeza/inclusão da tabela, com COMMIT a cada X registros.
Seria algo do tipo :
EXECUTE IMMEDIATE 'DECLARE ' ||
' W_CONTADOR NUMBER(12) := 0; '||
' CURSOR cv_limpeza IS '||
' ... '||
'BEGIN '||
' OPEN cv_limpeza;'||
' LOOP'||
' FETCH ...'||
' EXIT WHEN ..'||
' DELETE FROM ...'||
' w_CONTADOR := W_CONTADOR + SQL%ROWNUM; '||
' IF W_CONTADOR >= 10000 THEN '||
' COMMIT; '||
' W_CONTADOR := 0; '||
' END IF; '||
' END LOOP;'||
' CLOSE cv_limpeza;'||
'END'
USING <variáveis bind>;
- Collections (FETCH ... BULK COLLECT .. LIMIT ... / FORALL);
- Variáveis Bind;
Abraços,
Sergio Coutinho
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Bing [Bot] e 1 visitante