- Este tópico contém 8 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 1 mês atrás por
Girino.
-
AutorPosts
-
1 de fevereiro de 2011 às 1:12 am #98053
Girino
ParticipanteBoa Noite à Todos..!! 8)
Estou quase resolvendo meu problema.
Já estaria resolvido se na procedure abaixo não desse erro de tabela locada, ou seja, eu gero informações em uma tabela na primeira procedure e depois eu atualizo as informações com base nessa tabela, porem da esse bendito erro. (ORA-01591: lock held by in-doubt distributed transaction string)CREATE OR REPLACE PROCEDURE ATUALIZA_BASE IS
BEGIN
BEGIN
CHECA_DADOS;
END;BEGIN
ATUALIZA_DADOS;
END;END;
Alguém teria a lguma sugestão? 💡
Já tentei com Package também e dá o mesmo erro..!! 🙁 🙁
To Ferrado..!! 😥
1 de fevereiro de 2011 às 2:48 pm #98056Gilkauer
ParticipanteDentro da procedure CHECA_DADOS tu faz alguma manipulação de dados? (insert/update/delete)
Se fizer vai ter que salvar as alterações para que o procedimento possa continuar.
1 de fevereiro de 2011 às 2:50 pm #98058leandrolbs
Participantecoloque o script da tabela aqui..
pois provavelmente ela deve ter ficado com algum “commit” pendente, na criação dela coloque delete on commit acho que vai resolver.
1 de fevereiro de 2011 às 4:01 pm #98062Girino
ParticipanteSegue: 😀
CREATE OR REPLACE PROCEDURE CHECA_DADOS
ISBEGIN
Execute Immediate’DELETE TMP_TESTE1′;
Execute Immediate ‘INSERT INTO TMP_TESTE1 as SELECT campo FROM tabela;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;END;
Obs: Depois eu utilizo os dados da tabela TMP_TESTE1 NA 2º Procedure. 😉
1 de fevereiro de 2011 às 4:33 pm #98064Gilkauer
ParticipanteÉ realmente o que eu mencionei. Você esta manipulando as informações e não esta as salvando no banco.
Você deve dar um commit para tirar a tabela de lock.Agora se me permite um comentário, não vejo a nescessidade de executar os comandos via EXECUTE IMMEDIATE.
1 de fevereiro de 2011 às 4:38 pm #98066Girino
ParticipanteOlá, tudo Bem? 😀
Onde eu coloco o commit?
Seria apenas um neste caso? ou 2?Quanto ao execute immediate, eu apenas copiei como exemplo. Realmente não há necessidade neste caso. 😀
Muito Obrigado, 💡
1 de fevereiro de 2011 às 4:48 pm #98067Gilkauer
ParticipantePode ser incluido após o ultimo comando executado (insert into …)
1 de fevereiro de 2011 às 5:22 pm #98071fsitja
ParticipanteO When Others é um problema. Como regra geral, não use when others a menos que dê um RAISE; dentro do bloco de exception, ou o programa chamador não receberá o aviso, mascarando uma situação de erro que pode deixar o banco com problemas sérios de consistência e integridade de dados.
Além disso, qualquer exception disparado para cima automaticamente já faz um rollback implícito do programa que está sendo executado.
In database PL/SQL units, an unhandled user-error condition or internal error condition that is not trapped by an appropriate exception handler causes the implicit rollback of the program unit.
http://download.oracle.com/docs/cd/E118 … m#ADFNS359
A título de informação, todos comandos de DDL (criação e drop de tabela, por exemplo) fazem commit implícito e é preciso atenção com o uso de execute immediate nesses casos.
1 de fevereiro de 2011 às 5:52 pm #98073Girino
ParticipanteGalera..!! 😀
Muito Obrigado pela Ajuda..!! 💡
Esta Rodando e parece que esta funcionando perfeitamente após eu colocar o commit…!! 😀 😀 😀
Vou ficar monitorando e qualquer coisa eu retorno, mas por enquanto obrigado mesmo..!! 😛
Agora já virei Sapo 😀
-
AutorPosts
- Você deve fazer login para responder a este tópico.