Domanda

Ho un database Progress da cui sto eseguendo un ETL.Una delle tabelle da cui sto leggendo non ha una chiave univoca, quindi devo accedere a ROWID per poter identificare in modo univoco la riga.Qual è la sintassi per accedere al ROWID in Progress?

Capisco che ci siano problemi con l'utilizzo di ROWID per l'identificazione delle righe, ma al momento è tutto ciò che ho.

È stato utile?

Soluzione

Un breve avvertimento per la mia risposta: sono passati quasi 10 anni dall'ultima volta che ho lavorato con loro Progresso quindi la mia conoscenza è probabilmente più che obsoleta.

Controllando il Riferimento al linguaggio Progress [PDF] sembra mostrare che le due funzioni che ricordo sono ancora lì: ROWID E RECID.IL ROWID la funzione è più recente ed è preferibile.

In Progress 4GL lo useresti in questo modo:

FIND customer WHERE cust-num = 123.
crowid = ROWID(customer).

O:

FIND customer WHERE ROWID(customer) = crowid EXCLUSIVE-LOCK.

Controllando il Riferimento SQL di avanzamento [PDF] mostra ROWID è disponibile anche in SQL come estensione Progress.Lo useresti in questo modo:

SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123

Modificare: Modificato in seguito al feedback di Stefan.

Altri suggerimenti

A seconda della situazione e del comportamento dell'applicazione, ciò può avere importanza o meno, ma è necessario essere consapevoli che ROWID e RECID vengono riutilizzati e che potrebbero cambiare.

1) Se un record viene eliminato, il suo ROWID verrà eventualmente riutilizzato.

2) Se la tabella viene riorganizzata tramite dump e caricamento o spostamento della tabella in una nuova area di archiviazione, i ROWID cambieranno.

Giusto per aggiungere qualcosa alle risposte di Dave Webb.Avevo provato ROWID nell'istruzione select ma mi è stato restituito un errore di sintassi.ROWID funziona solo se specifichi il resto delle colonne da selezionare, non puoi utilizzare *.

Questo non funziona:

SELECT ROWID, * FROM customer WHERE cust-num = 123

Funziona:

SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123

Una rapida ricerca su Google rivela questo:http://bytes.com/forum/thread174440.html

Leggi il messaggio in fondo di greg@turnstep.com (vuoi oid o ctid a seconda di cosa garantisce che desideri re persistenza e unicità)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top