Consultor Eletrônico



Kbase 51826: Erro ao localizar registros via Dataserver Oracle
Autor   Eloi Rene Pscheidt - STF
Acesso   Público
Publicação   16/03/2017
Problema:
É possível localizar o registro via comando FOR mas não via comando FIND.

Causa:
A coluna PROGRESS_RECID está com valor NULO para os registros que apresentam esta situação.
O comando FIND utiliza o valor desta coluna para recuperar os registros do banco de dados, enquanto o comando FOR não necessita deste valor para localizar os registros.
Quando o registro é criado pelo OpenEdge, o Dataserver automaticamente popula o valor deste campo com base no próximo valor da sequencia que possui o nome da tabela com o sufixo "_seq", por exemplo, para a tabela "customer", o nome da sequencia será "customer_seq".
Programas desenvolvidos em outra tecnologia precisam manualmente atribuir o valor desta sequencia para a coluna PROGRESS_RECID.
Outra causa pode ser qualquer manutenção realizada diretamente no banco Oracle que tenha atribuído valores nulos a esta coluna.
Para descobrir se existem registros nesta situação, execute o comando a seguir num client Oracle, como o SQLPLUS:
SELECT COUNT(*) FROM <tabela> WHERE progress_recid IS NULL;
Substitua <tabela> pelo nome da tabela desejada.
Se a consulta retornar um valor maior que zero, indica que existem registros nesta situação.

Solução:
Corrigir os programas não OpenEdge que criam registros, populando manualemnte a coluna PROGRESS_RECID e corrigir os registros que já estão nesta situação através de um comando semelhante a este:
UPDATE <tabela> SET progress_recid = <tabela>_seq.nextval WHERE progress_recid IS NULL;
Obs.: substituir <tabela> pelo nome da tabela e executar este comando utilizando um client Oracle, como o SQLPLUS.