Tempo aproximado para leitura: 00:02:36 min
Ocorrência
O erro restrição exclusiva (SRCADGER.SRG09448##REC) violada ou unique constraint (SRCADGER.SRG09448##REC) violated é exibido durante execução de rotina.
Ambiente
Framework - Framework (Linha Datasul) - Oracle - Todas as versões
Causa
A mensagem de erro indica a tentativa de gravação de um valor duplicado em um índice que permite somente valores únicos.
Solução
A solução deste problema passa pela análise do objeto que apresenta o erro. O sufixo ##REC no nome do índice indica que trata-se de um índice criado e mantido pelo Dataserver Oracle.
Observe abaixo o DDL de criação deste índice em uma das situações recebidas em nosso suporte:
CREATE UNIQUE INDEX SRG09448##REC ON DOCTO_GERAL (progress_recid);
O índice é formado apenas pelo campo PROGRESS_RECID, o qual é utilizado para manter a compatibilidade com a função RECID nos bancos Openedge. Mais informações sobre este campo podem ser encontradas ao final deste artigo. Especificamente para índices com sufixo ##REC a correção pode ser realizada de forma simples, buscando o valor da sequência NOME_DA_TABELA_SEQ e atribuindo ao campo PROGRESS_RECID para cada um dos registros dela.
Abaixo o exemplo para correção do erro apresentado ao início deste artigo:
update DOCTO_GERAL set PROGRESS_RECID = DOCTO_GERAL_SEQ.nextval;
commit;
Esta mesma solução pode ser aplicada a qualquer outra tabela, seguindo este modelo:
update TABELA set PROGRESS_RECID = TABELA_SEQ.nextval;
commit;
A execução deste comando geralmente é rápida, mas pode demorar mais do que o esperado em tabelas com uma grande quantidade de registros. Realize o teste em um ambiente de testes atualizado com os dados de produção para saber o tempo aproximado desta manutenção em ambiente de produção.
Terminada a execução do comando, realize novo teste com a rotina que apresenta o problema.
Importante
Esta solução se adequa apenas para índices com o sufixo ##REC. Os demais índices devem ser analisados pelas áreas responsáveis pelo objeto, visto que cada índice possuirá campos diferentes e poderá ser alimentado por outras sequências.
Saiba mais
Informações adicionais em Framework - Linha Datasul - TEC - Coluna PROGRESS_RECID em ambientes com OpenEdge Dataserver
0 Comentários