[firebase-br] Dúvida for update with lock

Visão On-Line - Marco Antônio marco em visao-ol.com.br
Sex Ago 20 11:02:03 -03 2010


- Travar os registro na alteração.
SELECT * FROM tabela where codigo=1 FOR UPDATE WITH LOCK


----- Original Message ----- 
From: "Marcelo Barby" <mib em teorema.inf.br>
To: <lista em firebase.com.br>
Sent: Friday, August 20, 2010 10:10 AM
Subject: [firebase-br] Dúvida for update with lock


Pessoal,



                Preciso fazer o travamento de um registro dentro de uma
procedure estou tendo alguns deadlock eventuais, gostaria de saber se o
seguinte procedimento é correto e poderá resolver, é uma tabela de
contadores de chaves primárias onde o processamento é todo feito no servidor
com acessos de dezenas de usuários concorrentes hoje utilizando terminal
server:



                Detalhe que tentei utilizar FOR UPDATE WITH LOCK  e o WITH
LOCK não é reconhecido pelo firebird. Utilizo 2.1



                A parte da Procedure é a seguinte:



/*      Aqui é para verificar se o contador já existe */

      SELECT CONTADOR_CODIGO, count(CONTADOR_TABELA) FROM TEO_CONTADOR

       WHERE (CONTADOR_TABELA   = :IP_TABELA) AND

             (EMPRESA_CODIGO    = :IP_EMPRESA) AND

             (CONTADOR_AUXILIAR = :IP_AUXILIAR)

    GROUP BY CONTADOR_CODIGO

  FOR UPDATE

        INTO :R_CONTADOR, :V_CONTADOR;



      /* Se é Nulo Cria com 0 */

      if (:V_CONTADOR IS NULL) then

         begin

            /* Atualiza Contador */

            INSERT INTO TEO_CONTADOR ("EMPRESA_CODIGO", "CONTADOR_TABELA",
"CONTADOR_AUXILIAR", "CONTADOR_CODIGO")

            VALUES (:IP_EMPRESA, :IP_TABELA, :IP_AUXILIAR, :R_CONTADOR);

            EXIT;

         end

      /* Gravação ou Adição de Valor */

      if ((IP_TIPO = 'G') or (IP_TIPO = 'A')) then

          begin

             UPDATE TEO_CONTADOR SET CONTADOR_CODIGO = :R_CONTADOR

             WHERE (CONTADOR_TABELA   = :IP_TABELA) AND

                   (EMPRESA_CODIGO    = :IP_EMPRESA) AND

                   (CONTADOR_AUXILIAR = :IP_AUXILIAR);

         End



                Grato



                Marcelo Barby.



______________________________________________
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