COMO LOCKAR TABELA ORACLE

USUARIO.EXCLUIDOS 24/11/2004 17:22:34
#51803
boa tarde, eu gostaria de saber se há como eu lockar uma tabela ORACLE fazenod o seguinte sql

SELECT MAX(CODIGO) FROM TABELA

alguém poderia me ajudar ???
USUARIO.EXCLUIDOS 24/11/2004 17:40:26
#51807
Resposta escolhida
Eu não conheço muito de oracle, mas vc está perguntando se este comando bloqueia a tabela ou vc quer bloquear a tabela quando executar este comando ?
Se é pra bloquear a tabela quando dá esse comando, imagino que seja pq está havendo o caso de mais pessoas executarem o sql ao mesmo tempo e o retorno esta sendo duplicado intaum. Estou lhe perguntando pq vc não tem como bloquear ou forçar um bloqueio numa tabela dando um select. Explica melhor teu problema que talvez apareçam mais idéias.
USUARIO.EXCLUIDOS 24/11/2004 18:15:03
#51813
Não tem como vc bloquear ou até forçar um bloqueio em um select. O que pode acontecer é este select ser bloqueado por alguma transação, atualização nesta tabela, e isso ambém tem como se tratar.
Se vc está usando Procedure, tente mandar
Vou fazer em T-SQL, pois não conheço PL/SQL, mas a idéia e a instrução insert é a mesma , só trocar os comandos pra criação de proc...etc

Create proc Insere(@nome varchar(10),ender varchar(10))
as

insert into tabela(codigo,nome,ender) select max(codigo)+1from tabela ,@nome,@ender

desta maneira vc não está travando a tabela, mas diminuindo o range de tempo de alguém estar inserindo na mesma hora que outro. é praticamente impossível.Eu uso aqui e olha que tem vezes que tem 50 a 100 pessoas inserindo na pauleira e nunca aconteceu de dar valores duplicados
Essa é uma idéia....mas como não sou perfeito entendedor de oracle, talvez até haja alguma maneira de se conseguir isso por ele. Não sei..

USUARIO.EXCLUIDOS 25/11/2004 08:43:25
#51875
Como o proprio jose disse, e eu tb, não existe maneira de vc travar uma linha por um select..O que pode acontecer é ter um update que trave esta tabela enquanto durar a transação (como o jose disse). e mesmo assim vc tem como tratar isso. Acho que vc está indo pelo caminho que não dara certo. Tente mudar tua logica, mas não tem como vc travar uma linha, ou tabela, ou página ,não sei se o oracle trabalha com esses bloqueios, por um select.
Tópico encerrado , respostas não são mais permitidas