Alguém pode me mostrar um exemplo de um bloqueio offline otimista em um Oracle Stored Procedure?
relate perguntas
-
Backups de banco de dados no Oracle - Exportar o banco de dados ou usar outras ferramentas?
-
ORDER BY usando prioridades personalizadas para colunas de texto
-
Interface sqlplus confortável? [fechado]
-
Como encontrar as instruções SQL mais recentes no banco de dados?
-
Como posso consultar nomes usando expressões regulares?
Normalmente, acho que os sistemas selecionariam o valor ora_rowscn ao ler os dados e, ao escrevê-los, especificariam esse valor como parte da instrução de atualização. Se nenhuma linha for atualizada, o registro foi excluído ou o registro foi alterado.
Infelizmente, a abordagem ora_rowscn não funcionará muito bem. Ainda permite "atualizações perdidas".
Eu tenho minhas informações do AskTom: ORA_ROWSCN para bloqueio otimista
Exemplo copiado aqui para antecipar links mortos...
O que você deve fazer, IMHO, é adicionar uma coluna extra (por exemplo: Version_Number) à sua tabela onde você define o próximo valor de uma sequência na atualização de um registro (usando um gatilho ou faça isso no código do pacote).
WorkFlow: O cliente consulta algumas linhas e obtém os dados com o version_Number. Ao atualizar esses dados, ele precisa verificar o version_number com o version_number atual no registro. Se forem diferentes, nenhuma linha será atualizada e você deverá retornar um erro ao cliente (No_Records_Found).
Você vê algo assim:
.
Como eu disse, você deve avisar o cliente que não houve atualização de cadastro, mas isso pode ter 2 motivos:
Em ambos os casos, o cliente precisa atualizar esse registro novamente e determinar o que fazer a seguir.