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.

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top