Come ottenere il ROWID da un database Progress
-
01-07-2019 - |
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.
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à)