COMO LOCKAR TABELA ORACLE
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 ???
SELECT MAX(CODIGO) FROM TABELA
alguém poderia me ajudar ???
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.
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.
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..
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..
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