Erro com cursor + autocommit

Scripts Diversos para o Oracle SQL*Plus. (Relacionado a ferramenta Oracle SQL*Plus, para questões de SQL, usar o forum SQL)
Responder
coyote
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Qui, 14 Jul 2005 4:40 pm
Localização: Venâncio Aires - RS

Bom... estou tentando executar este código q segue abaixo usando o comando SET AUTOCOMMIT 1000, mas ele gera um erro. sendo que ao remover a linha SET AUTOCOMMIT 1000 ele executou normalmente.
O que pode ter ocorrido de errado? Vocês podem me ajudando?

Obrigado,

Erro no código:

Selecionar tudo

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

Selecionar tudo

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;
/
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

SET AUTOCOMMIT é um comando do SQL*PLUS.
Não pode usar ele dessa forma dentro de um bloco PL/SQL.

Uma coisa que eu não entendi, você está colocando O COMMIT dentro do LOOP, ou seja, vai comitar cada vez.

Num bloco PL/SQL, você pode comitar de 1000 em 1000 da seguinte forma:
  • Crie um contador x:=x+1;
  • Quando x for 1000, comite e zere o x...
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 13 visitantes