[firebase-br] Problema com numero de controle de documento

Cyber Guido cyberguido em gmail.com
Qua Out 8 16:55:51 -03 2014


Defina um critério de unicidade e trate o erro quando houver 
duplicidade, ou crie uma tabela exclusiva para estes valores.´Se optar 
pelo último caso, os passo necessários, basicamente, são.

Para exemplo tomemos um tabela com os campos Empresa, Controle, os 
mínimos necessários, e cada empresa deverá, obviamente, ter um e somente 
registro nesta tabela.

Inicie uma transação dedicada para o processo de obtenção do controle, 
com retry em caso de conflito de update ou deadlock;
Execute o comando Update <tabela> set Controle = Controle + 1 where 
Empresa = <Empresa>;
Select Controle from Tabela Where Empresa = <Empresa>

É basicamente isto.

Cordialmente,
Carlos

------ Original Message ------
From: "Jean Alysson" <jeanpapa em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: 08/10/2014 14:55:44
Subject: [firebase-br] Problema com numero de controle de documento

>Olá, possuo uma tabela de contas a pagar onde preciso armazenar um 
>numero
>de controle que começa de 1 para cada empresa e incrementa a cada 
>registro
>inserido.
>
>Esse numero nao pode se repetir dentro da mesma empresa, nas outras 
>sim.
>Nao posso usar generator, pois eu teria q adicionar um novo a cada 
>empresa
>cadastrada, pensei em usar:
>max(num_controle)+1 where ie_empresa = x
>
>mas se dois usuarios fizerem a mesma requisicao, posso ter o mesmo
>num_controle, teria que fazer validacao antes de inserir, mas sera que 
>nao
>poderá cair no mesmo problema, se validar ao mesmo tempo ?
>
>Alguma sugestao ?
>
>ID (generator)
>ie_empresa
>num_controle
>valor
>.
>.
>. (outros campos)
>
>
>Obrigado
>Jean Alysson Ambrosio
>______________________________________________
>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