Como obter o ROWID de um banco de dados Progress
-
01-07-2019 - |
Pergunta
Eu tenho um banco de dados Progress que estou realizando uma ETL partir. Uma das tabelas que eu estou lendo a partir não tem uma chave única sobre ele, assim que eu preciso para acessar o ROWID para ser capaz de identificar exclusivamente a linha. O que é a sintaxe para acessar o ROWID em andamento?
Eu compreendo que há problemas com o uso ROWID para identificação de linha, mas é tudo o que tenho agora.
Solução
A ressalva rápida para a minha resposta - é quase 10 anos desde que eu trabalhei com Progress assim que meu conhecimento é provavelmente mais do que um pouco fora de data.
Verificar o Progress Language Reference [PDF] parece mostrar as duas funções que eu lembro ainda estão lá: ROWID
e RECID
. A função ROWID
é mais recente e é o preferido.
Em andamento 4GL você usaria algo como isto:
FIND customer WHERE cust-num = 123.
crowid = ROWID(customer).
ou
FIND customer WHERE ROWID(customer) = crowid EXCLUSIVE-LOCK.
Verificar o Progress SQL Reference [PDF] mostra ROWID
também está disponível em SQL como uma extensão Progress. Você poderia usá-lo assim:
SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123
Editar:. Editado seguinte gabarito de Stefan
Outras dicas
Dependendo da sua situação e do comportamento da aplicação este pode ou não importa, mas você deve estar ciente de que ROWIDs & RECIDs são reutilizados e que eles podem mudar.
1) Se um registro é excluído é ROWID acabará por ser reutilizados.
2) Se a tabela é reorganizada através de um despejo e de carga ou um tablemove para uma nova área de armazenamento, em seguida, os ROWIDs vai mudar.
Só para acrescentar um pouco para as respostas de Dave Webb. Eu já havia tentado ROWID na instrução SELECT, mas foi dado um erro de sintaxe. ROWID só funciona se você especificar o restante das colunas para selecionar, você não pode usar *.
Isso não funciona:
SELECT ROWID, * FROM customer WHERE cust-num = 123
Isto funciona:
SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123
Uma busca rápida no Google transforma-se o seguinte: http://bytes.com/forum/thread174440.html
Leia a mensagem para o fundo por greg@turnstep.com (você quer quer oid ou ctid dependendo o que garante que você quer persistência re e singularidade)