Pessoal,
Estou com a seguinte situação:
Algum safado incluiu manualmente no banco uma empresa e alterou a numeração do id do campo cd empresa de 33846 para 627565 perdendo 593719 posições. Gostaria de saber se existe uma forma de resgatar essas posições perdidas, eu ensaiei uma situação colocando uma condição na procedure, mas o chefe não aceito ele não quer que use uma condição (IF), ele não me disse como mas ele disse sobre o conceito de random para ele buscar o numero que ainda não existe na tabela e adicionar +1. Segue abaixo o que fiz e foi rejeitado…dava certo mas não querem o IF.
[code]
SELECT NVL(MAX(cd_empresa), 0) + 1
INTO codigo_empresa
FROM TBOD_EMPRESA_PROPOSTA
WHERE cd_empresa < 10;
IF (codigo_empresa = 10) THEN
SELECT NVL(MAX(cd_empresa), 0) + 1
INTO codigo_empresa
FROM TBOD_EMPRESA_PROPOSTA;
END IF;
codRetorno := codigo_empresa;[/code]
Obrigado pela atenção…
Não consegui entender como é que isso “dava certo”.
É por isso que rejeitaram a sua solução.
Explique como isso poderia “dar certo”.
Olhando esse código, o próximo valor seria algo maior que 627565 , não um valor que “não existe ainda na tabela”.
[quote=Rodrigomazza]
Algum safado incluiu manualmente no banco uma empresa e alterou a numeração do id do campo cd empresa de 33846 para 627565 perdendo 593719 posições. [/quote]
Eu ficaria bem preocupado com isso.
Se safados podem inserir registros no banco, o que garante que ele não irá corromper outras informações por lá?
Mas para que você quer recuperar essas posições exatamente?
Causa algum problema no sistema ou apenas incomoda visualmente?
Eu iria descadastrar essa empresa ( 627565 ), reiniciar a sequence (você está usando uma sequence, não ? ) e começar do ponto certo.
Boa! Ou move o registro para o id 33846 e altera a sequencia para este valor.
Então o BD que utilizamos aqui é oracle…
Sim é para se preocupar mas essa inserção ja foi identificada…
a questão é que meu chefe não quer um if na procedure…ele alega mesmo não sabendo como que existem outra maneira de fazer isso tipo um RANDOM só que eu não conheço…
desculpem se não fui claro.
Acontece que, mesmo com a geração randômica, será preciso verificar se o número gerado ainda não existe. Além do mais, isso destruiria a razão de ser da sequence, afinal, ela estaria gerando valores desnecessários, pois é o gerador randômico que será utilizado.
O ideal, realmente, é mover a sequence para o valor correto e corrigir a informação do cadastro da empresa. É gambiarra? Sim, mas qualquer outra coisa que venha a ser feita será pior ainda.