Fórum Commit #28198
29/06/2005
0
Exemplo: Minha transação contem 5 mil linhas e quando eu dou um commit ele me retorna erro por ser grande de mais.
Sei que não é assim, mas eu poderia dar um commit(1000) e ele faria as primeiras mil transações em seguida as outras mil e assim por diante até terminar. Mas de uma forma automática.
Nsconsultoria
Curtir tópico
+ 0Posts
30/06/2005
Motta
Como é este update ?
Gostei + 0
30/06/2005
Marcio.theis
SET AUTOCOMMIT 1000
no caso ira efetuar um commit a cada 1000 INSERT, UPDATE ou DELETE...
e ainda caso o controle AUTOCOMMIT seja ON ou IMMEDIATE, as alterações após a execução de cada comando ou cada bloco serão automaticamente confirmadas, OFF permite apenas COMMIT explícito via comando
então pode ser
SET AUTOCOMMIT OFF/ON/IMMEDIATE/n
Gostei + 0
04/07/2005
Nsconsultoria
Obrigado pela solução.
O código com o problema esta abaixo. Você poderia me demostrar com o próprio código a sua solução.
Obrigado novamente.[/color:83fb8e3d04]
Declare
-- Declaração do Cursor
CURSOR TblPeriodo IS
Select Distinct DtOcorrencia
From StatusAgencia
Where DtOcorrencia <= TO_CHAR(ADD_MONTHS(SYSDATE,-3),´YYYYMMDD´);
-- Declaração da variável utilizada pelo Cursor
v_TblPeriodo TblPeriodo¬ROWTYPE;
Begin
-- Abertura do Cursor
Open TblPeriodo;
Fetch TblPeriodo Into v_TblPeriodo;
While TblPeriodo¬FOUND Loop
-- DBMS_OUTPUT.PUT_LINE(v_TblPeriodo.DtOcorrencia);
ClearReg(v_TblPeriodo.DtOcorrencia);
COMMIT;
Fetch TblPeriodo Into v_TblPeriodo;
End Loop;
-- Fechamento do Cursor
Close TblPeriodo;
COMMIT;
-- Tratamento de Erro
EXCEPTION
-- Para qualquer tipo erro será realizado um Rollback
WHEN OTHERS THEN
ROLLBACK;
End;
/
Gostei + 0
04/07/2005
Marcio.theis
SET AUTOCOMMIT ON
e depois que terminar um
SET AUTOCOMMIT OFF
Gostei + 0
07/07/2005
Nsconsultoria
Obrigado novamente pela atenção.
Sei que a solução é clara para você, mas como não conheço o comando, gostaria de saber o seguinte:
Antes de executar o seu cursor de devo dar um SET AUTOCOMMIT ON
Depois de executar o cursor, devo dar um SET AUTOCOMMIT OFF
E o SET AUTOCOMMIT 1000 em que momento eu devo executar?
Gostei + 0
07/07/2005
Marcio.theis
Gostei + 0
12/07/2005
Nsconsultoria
Alterei o código como você pode ver abaixo em azul, entretanto a alteração causou o seguinte erro:
Removi a linha SET AUTOCOMMIT 1000 e ele executou normalmente.
O que pode ter ocorrido de errado? Você pode continuar me ajudando?
Obrigado,
Nilton
[b:aff10febd2]-- Declaração do Cursor
*
ERROR at line 3:
ORA-06550: line 15, column 6:
PL/SQL: ORA-00922: missing or invalid option
ORA-06550: line 15, column 2:
PL/SQL: SQL Statement ignored
** Mon Jul 11 10:42:23 GRNLNDST 2005 [/b:aff10febd2]
[/b]
[color=blue:aff10febd2][/color:aff10febd2]
Declare
-- Declaração do Cursor
CURSOR TblPeriodo IS
Select Distinct DtOcorrencia
From StatusAgencia
Where DtOcorrencia <= TO_CHAR(ADD_MONTHS(SYSDATE,-3),´YYYYMMDD´);
-- Declaração da variável utilizada pelo Cursor
v_TblPeriodo TblPeriodo¬ROWTYPE;
Begin
-- Abertura do Cursor
SET AUTOCOMMIT 1000;
Open TblPeriodo;
Fetch TblPeriodo Into v_TblPeriodo;
While TblPeriodo¬FOUND Loop
-- DBMS_OUTPUT.PUT_LINE(v_TblPeriodo.DtOcorrencia);
ClearReg(v_TblPeriodo.DtOcorrencia);
COMMIT;
Fetch TblPeriodo Into v_TblPeriodo;
End Loop;
-- Fechamento do Cursor
Close TblPeriodo;
COMMIT;
-- Tratamento de Erro
EXCEPTION
-- Para qualquer tipo erro será realizado um Rollback
WHEN OTHERS THEN
ROLLBACK;
End;
/
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)