[RESOLVIDO]Transação retorna mensagem "AVISO: não há uma transação em execução"
9 respostas
jorgereidinaldo
Fiz está transação para poder implementar em minha aplicação porem nos testes em BD ele me retorna a seguinte mensagem "AVISO: não há uma transação em execução"
não sei o por que está acontecendo isso porem mesmo ele dando está mensagem ele está fazendo a inserção corretamente no BD.
Está transação iz para pegar o ultimo numero que foi feito inserção para eu por em uma outra tabela.
Alguém tem alguma ideia do que seja
.
start transaction;
insert into sc_endereco.tb_estados(fi_estado,fi_abreviatura)values('no outro','ou');
insert into sc_endereco.tb_t(fi_t)values((select last_value from sc_endereco.seq_estados));
commit;
end;
só mais um detalhe…
você pretende utilizar essas mesmas queries em alguma transação na sua aplicação?
insert into sc_endereco.tb_estados(fi_estado,fi_abreviatura)values('no outro','ou');
insert into sc_endereco.tb_t(fi_t)values((select last_value from sc_endereco.seq_estados));
pois essa forma é um tanto quanto arriscada se você trabalhar com um número considerável de acessos.
Repare que você está pegando o last_value de uma sequence que foi utilizada na primeira query (imagino que você utilize o próximo valor da sequence como valor default para a tb_estados). Levando em conta que você pode ter essa transação em paralelo, nada garante que o teu last_value da segunda query irá retornar sempre o valor utilizado na primeira…
Claro que a margem de erro é muito pequena considerando os milissegundos de execução de um insert no PostgreSQL, mas como eu disse, se você tiver um fluxo grande, isso pode acontecer…
jorgereidinaldo
Amigo estou mesmo preocuado com esta situação do last_value como comentou anteriormente
porem sou iniciante em postgres e não sei como realizar esta operação de uma forma mais segura.
Estou desenvolvendo um Sofware para uma empresa na hora da inserção tenho que pegar o ID da primeira tabela e passar para uma outra tabela
voce sabe de alguam solução para este problema.
erico_kl
jorgereidinaldo:
Amigo estou mesmo preocuado com esta situação do last_value como comentou anteriormente
porem sou iniciante em postgres e não sei como realizar esta operação de uma forma mais segura.
Estou desenvolvendo um Sofware para uma empresa na hora da inserção tenho que pegar o ID da primeira tabela e passar para uma outra tabela
voce sabe de alguam solução para este problema.
Você pode fazer uma query separada para pegar o próximo valor da sequence e assim utilizar esse valor em memória para as outras…
Caso vc utilize JDBC puro, por exemplo, na sua DAO faça um método que retorne o valor da sequence e a armazene numa variável local, repassando esse valor para as outras duas queries…