Por favor, gostaria de saber como faço para criar um número sequencial consistente, exemplo, pegar o último e maior número de uma sequencia e a partir dele dar continuidade consecutivamente.
A minha dúvida é, se é necessário capturar o último maior valor ou a função nextval já se encarrega disso? Obrigatoriamente preciso criar um SEQUENCE?
O problema do max(coluna)+1 é que pode gerar repetições caso duas ou mais sessões diferentes façam a consulta no mesmo instante.
No caso da sequence, se uma sessão pega o nextval e não utilizar o valor pra preencher a coluna, este valor se perderá, e ainda depende também do cache da sequence, que poderão ser perdidos janelas de valores ao invés de um único valor.
Se a "consistencia" que você deseja é ter a coluna preenchida com números sequenciados sem pular valores e sem repetições, fica difícil de se fazer isto.
Sequence é o jeito correto de se fazer isso. Usando Select MAX você vai encontrar problemas e erros com inserts simultâneos, pois ambos verão o mesmo valor no select, causando
A sequence, entretanto, não garante que não seja "pulado" um número. Por exemplo: se ocorrer um exception após um insert esse nextval que estaria sendo inserido por aquela transação não pode voltar atrás em caso de rollback. Logo vai ficar um furo na sequence, não há como evitar.
A situação é a seguinte eu já possuou registros em uma tabela (inseridos manualmente para testes), gostaria de saber como devo fazer para que meu SEQUENCE inicie a contagem a partir do meu último registro. É possível fazer isso? Além disso, não encontrei em nenhum lugar na web como zerar, reiniciar este contador sequencial, tem como fazer isso?
No comando de create sequence você pode setar o valor para aquele que você quiser: no seu caso veja o valor com o select que você postou e crie a sequence.