Consultor Eletrônico



Kbase 50346: FIND e FOR EACH com resultados diferentes em ambiente ORACLE
Autor   Eloi Rene Pscheidt - CAT
Acesso   Público
Publicação   30/01/2015
Quando um comando FIND não encontra um registro que é visível pelo comando FOR EACH, pode ser que existam problemas nos valores inseridos na coluna PROGRESS_RECID.
Estes problemas podem ser registros com valor NULO neste campo, ou com valores DUPLICADOS.
Esse campo é automaticamente atualizado pelo Progress toda vez que o registro é criado, alimentando-o com base na sequencia chamadoa <nome_da_tabela>_seq.
Qualquer procedimento para inserir registros por fora do Progress (JDBC, SQLLOADER, etc) deve prever a carga deste campo.

Para descobrir se há registros com valor NULO neste campo:
select count(*) from <tabela> where progress_recid is null;

Para descobrir se há registros com valores DUPLICADOS neste campo:
select progress_recid, count(*) from <tabela> group by progress_recid having count(*) > 1;

Se uma ou ambas dessas consultas retornarem valor maior que zero indica problema neste campo.

Em ambos os casos a correção é feita atualizando este campo com valores únicos:
update <tabela> set progress_recid = <nome_da_tabela>_seq.nextval;
commit;

OBS.: os comandos acima citados devem ser executados num cliente ORACLE, como o SQLPLUS.