• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

11 mensagens neste tópico

Boas malta, digam-me uma coisa que ainda não percebi.

Depois de um start transaction, se eu fizer commit é normal que o rollback dê para voltar atrás?!?!!?!?!?!?!?!!?

Experimentei e fiz commit e depois rollback e sim, voltou atrás, mas é suposto ? o commit não é a instrução máxima a ordenar realmente o "fazer"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelos meus conhecimentos, isso é suposto acontecer. Já agora qual o servidor de BD que está a usar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Supostamente no COMMIT a transacção terminava, por isso é estranho que ainda consigas fazer ROLLBACK.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um commit, normal, sem mais "extras", deverá terminar a transacção, eventualmente podes fazer savepoints, que embora sejam commits, não terminam uma transacção e podes fazer rollback para um dos savepoints criados. Dependendo da tecnologia que estás a usar, um commit pode não terminar uma transacção, se bem que duvido que estejas a usar alguma coisa que altere este comportamento.

Á primeira vista diria que o comportamento que descreveste não é normal.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Realmente estranho....

Já agora... em sqlplus por exemplo as vezes os comandos precisam de ";", outras vezes não!

Não poderás estar convencido que fizeste um commit, e na realidade não fizeste?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Vou aproveitar este tópico para colocar uma questão sobre o mesmo assunto.

Estou a testar Transacções utilizando savepoint e rollback mas estou com um problema.

No exemplo que mostro a seguir inicio uma transacção, crio um "ponto de restauro", e crio duas tabelas, ao que após o rollback elas não deveriam ser criadas.

O problema é mesmo esse, as tabelas são na mesma criadas.

start transaction;
savepoint pontoinicial;
create table tabela1 (codigo int, nome text);
create table tabela2 (codigo int, nome text);
rollback to savepoint pontoinicial;
commit;

Alguém sabe qual será o problema?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens que ver na documentação da tua base de dados se os savepoints incluem remover tabelas entretanto criadas. Às vezes há excepções.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Njay, é isso mesmo, testei com o código a seguir e funcionou na perfeição.

start transaction;
savepoint inicio;
insert into cliente values (1,'carlos');
insert into cliente values (2,'anabela');
rollback to savepoint inicio;

Como posso verificar a documentação da base de dados e alterar para aceitar remover tabelas?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens que ver na documentação da tua base de dados se os savepoints incluem remover tabelas entretanto criadas. Às vezes há excepções.

Acho que em situações normais não incluem. Em teoria são outro tipo de operações, e na maior parte dos sgbds isso iria inclur alterações na base de dados que mantem metadata sobre as outras bds.

Adicionalmente o utilizador pode não ter permissões para 'drop table'.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, mas estou a proceder ao rollback como root, e à partida deveria ser possível também voltar a trás com instruções de DDL.

Em todas as pesquisas que fiz não vi nenhuma referência que apenas dava para efectuar a operação rollback em instruções DML.

EDIT: Esqueci-me de referir que o SGBD em questão é o MySQL.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A documentação do mySQL tá toda on-line, é ires ao site (não sei o endereço de cor mas uma procura no google dá-te isso num instante; vê também os comentários que são feitos à documentação). Quanto a eliminar as tabelas não sei, tens que procurar na documentação, pode simplesmente não ser possível.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora