mysql - criando um mecanismo semelhante às seqências do Oracle
O MySQL fornece um mecanismo automático para incrementar IDs de registro. Isso é bom para muitos propósitos, mas eu preciso poder usar as seqüências oferecidas pelo ORACLE. Obviamente, não faz sentido criar uma tabela para esse fim.
A solução DEVE ser simples:
1) Crie uma tabela para hospedar todas as seqüências necessárias,
2) Crie uma função que aumente o valor de uma sequência específica e retorne o novo valor,
3) Crie uma função que retorne o valor atual de uma sequência.
Em teoria, parece simples ... MAS ...
Ao aumentar o valor de uma sequência (praticamente o mesmo quenextval
no Oracle), é necessário impedir que outras sessões executem essa operação (ou mesmo buscar o valor atual) até que a atualização seja concluída.
Duas opções teóricas:
a - Use uma instrução UPDATE que retorne o novo valor em uma única captura ou
b - Bloqueie a tabela entre UPDATE e SELECT.
Infelizmente, parece que o MySQL não permite bloquear tabelas dentro de funções / procedimentos e, ao tentar fazer a coisa toda em uma única instrução (como UPDATE ... RETURNING ...), você deve usar variáveis @ -type que sobrevivam a conclusão da função / procedimento.
Alguém tem uma idéia / solução funcional para isso?
Obrigado.