-- criando a tabela t
9.2>create table t (data date) ;
Table created.
-- populando alguns dados na tabela
9.2>insert into t values (sysdate ) ;
1 row created.
9.2>insert into t values (sysdate + .04166);
1 row created.
9.2>insert into t values (sysdate + 2* (.04166) ) ;
1 row created.
9.2>select * from t ;
-- consultando
9.2>select * from t ;
DATA---------
17-DEC-08
17-DEC-08
17-DEC-08
--vamos colocar um inocente comentario na tabela
9.2>comment on table t is 'tabela para testar commit implicito';
Comment created.
--decidi que o insert não é mais necessário , então vou fazer um rollback
9.2>rollback;
Rollback complete.
-- consultando novamente a tabela não pode ter mais nada nela , certo?
9.2>select * from t ;
DATA---------
17-DEC-08
17-DEC-08
17-DEC-08
Apesar do rollback o commit foi efetuado pelo COMMENT. Qualquer ddl faz isto. Portanto muito cuidado.
Via de Regra, se precisa fazer algum DDL , faça antes de iniciar uma transação -- SEMPRE --. O exemplo acima pode não ser comum, mas não é raro em triggers ter algum DDL chamado por um execute immediate, e neste caso a transação que disparou a trigger vai commitar implicitamente mesmo que mais adiante ocorra um erro.
Nenhum comentário:
Postar um comentário