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.