GARANTIR DESCONTO

Fórum Commit #28198

29/06/2005

0

Gostaria de saber se existe uma maneira de executar um commit a cada mil linha de transação.

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

Nsconsultoria

Responder

Posts

30/06/2005

Motta

qual erro que dá ?

Como é este update ?


Responder

Gostei + 0

30/06/2005

Marcio.theis

Você pode utilizar o comando AUTOCOMMIT, desta forma:

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


Responder

Gostei + 0

04/07/2005

Nsconsultoria

[color=blue:83fb8e3d04]Olá Márcio André Theis,
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;
/


Responder

Gostei + 0

04/07/2005

Marcio.theis

Antes de executar o seu cursor de um

SET AUTOCOMMIT ON

e depois que terminar um

SET AUTOCOMMIT OFF


Responder

Gostei + 0

07/07/2005

Nsconsultoria

Márcio André Theis,
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?


Responder

Gostei + 0

07/07/2005

Marcio.theis

Se vc setar o AUTOCOMMIT 1000 ira informar q ele deve efetuar um commit a cada 1000 insert, update ou delete, mas se setar como AUTOCOMMIT ON ou IMMEDIATE, ira informar q ele deve executar o commit a cada comando ou a cada bloco de comando.


Responder

Gostei + 0

12/07/2005

Nsconsultoria

Olá Márcio André Theis

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;
/


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar