ROWID è la posizione fisica di una riga. Di conseguenza è il modo più veloce per localizzare una riga, anche più veloce di una ricerca di chiave primaria. Quindi può essere utile in alcuni tipi di transazione in cui selezioniamo alcune righe, memorizziamo i loro ROWID e successivamente utilizziamo i ROWID in where
clausole per DML rispetto a quelle stesse righe.
La sintassi Oracle SELECT ... FOR UPDATE utilizza implicitamente ROWID, quando aggiorniamo la riga bloccata utilizzando WHERE CURRENT OF. Anche la tabella EXCEPTIONS (a cui si fa riferimento quando si applicano i vincoli con la clausola EXCEPTIONS INTO) ha una colonna ROW_ID. Questo ci permette di identificare rapidamente le righe che stanno rompendo il nostro vincolo.
Quest'ultimo esempio indica un altro utilizzo generale:quando stiamo scrivendo un pezzo di codice generico e abbiamo bisogno di un meccanismo per memorizzare gli UID senza preoccupazioni relative al tipo di dati, alle chiavi composte, ecc.
ROWNUM d'altra parte è una pseudo-colonna che contrassegna una riga in un determinato set di risultati. Non ha un significato permanente.
modifica
Il ROWID per un dato record può cambiare nel corso della vita di un sistema, ad esempio attraverso la ricostruzione di una tabella. Inoltre, se un record viene eliminato, è possibile assegnare un nuovo record a quel ROWID. Di conseguenza, i ROWID non sono adatti all'uso come UID a lungo termine. Ma sono abbastanza buoni per essere utilizzati all'interno di una transazione.