[firebase-br] Travar registro no BD

Carlos Magno P Souza delphimagno em uol.com.br
Sex Jun 5 20:45:36 -03 2009


V. pode criar um campo para sinalizar que aquele registro está em uso. O 
SELECT da segunda aplicação deveria ter um WHERE SN_OCUPADO <> 'S',
mas pra funcionar direito tem que usar também o WITH LOCK


----- Original Message ----- 
From: "Marcelo Moreira" <marcelomoreira.souza em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Friday, June 05, 2009 8:17 PM
Subject: Re: [firebase-br] Travar registro no BD


João,
Acho que sua sugestao nao vai resolver o problema pois como disse serao
varios aplicativos fazendo a mesma consulta. Entao se eu executar a primeira
e o primeiro registro da tabela ficar travado um outro sistema que fizer o
mesmo select teria que pegar o primeiro registro que nao estivesse travado
ou seja o segundo registro da tabela e um terceiro sistema fazendo o mesmo
select deveria pegar o terceiro registro da tabela que seria o primeiro
destravado.
Tem como resolver isso?


Em 05/06/09, João Dias <jdias.bjsoftware em gmail.com> escreveu:
>
> Basta você mudar o Select para
>
> select
>   first( 1 )
>   CL.NUMERO,
>   C.MENSAGEM
>
> from
>   CAMPANHA_LANCAMENTO CL
>
> inner join CAMPANHA C on (CL.ID_CAMPANHA = C.ID_CAMPANHA)
>
> where
>   CL.ENVIADO = 'N'
>
> with lock
>
> Cada vez que um Select com trava "With Lock" for executado se outro já o
> tiver sido uma exceção será disparada
>
> espero ter ajudado
>
> --
> João Dias de Carvalho Neto
> jdias.bjsoftware em gmail.com
>
> Quer Artigos de Patterns GOF e Patterns Corporativos com vídeo aula e
> Fontes Demonstrativos?
> vá a http://www.jdiasneto.blogspot.com
>
>
>
> Marcelo Moreira escreveu:
>
>> Pessoal,
>> Boa tarde!
>>
>> Preciso que um determinado registro na tabela seja travado de modo que
>> outro
>> usuario nao tenha acesso ha ele. Vou tentar explicar a situação:
>> O sistema vai fazer o envio de email e os cliente para quem ele deve
>> mandar
>> o emai vai ficar nesta tal tabela. o que acontece é que vao ser mais de 
>> um
>> sistema aberto fazendo o envio destes email e o sql que estou usando para
>> pegar sempre o ultimo registro que ainda nao foi enviado o email seria
>> este:
>>
>>
>> select
>>    first( 1 )
>>    CL.NUMERO,
>>    C.MENSAGEM
>>
>> from
>>    CAMPANHA_LANCAMENTO CL
>>
>> inner join CAMPANHA C on (CL.ID_CAMPANHA = C.ID_CAMPANHA)
>>
>> where
>>    CL.ENVIADO = 'N'
>>
>> ou seja nenhum outro sistema quando fizer o mesmo select nao pode ter
>> acesso
>> a este registro. e depois que o sistema fizer o envio do email eu altero 
>> o
>> campo: CL.ENVIADO = 'S'
>>
>> Como eu poderia resolver isto.
>>
>> Obrigado pela atencao.
>>
>> Abraços
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>>
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista