Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle ROWID come parametro di funzione/procedura

Dalla guida concettuale :

Lo svantaggio principale di un ROWID è che mentre è normalmente stabile, può cambiare in alcune circostanze:

  • La tabella viene ricostruita (ALTER TABLE MOVE ...)
  • Esporta / Importa ovviamente
  • Tabella delle partizioni con abilitazione movimento riga

Una chiave primaria identifica una riga logicamente , troverai sempre la riga corretta, anche dopo un delete+insert. Un ROWID identifica la riga fisicamente e non è persistente come una chiave primaria.

Puoi tranquillamente utilizzare ROWID in una singola istruzione SQL poiché Oracle garantirà che il risultato sia coerente, ad esempio per rimuovere i duplicati in una tabella. Per sicurezza, ti suggerisco di utilizzare solo le dichiarazioni incrociate di ROWID quando hai un lucchetto sulla riga (SELECT ... FOR UPDATE).

Dal punto di vista delle prestazioni, l'accesso alla chiave primaria è un po' più costoso, ma normalmente lo noterai solo se esegui molti accessi a riga singola. Se le prestazioni sono fondamentali, tuttavia, in genere è possibile ottenere maggiori vantaggi in tal caso dall'utilizzo dell'elaborazione di set rispetto all'elaborazione di riga singola con rowid. In particolare, se ci sono molti roundtrip tra il DB e l'applicazione, il costo dell'accesso alla riga sarà probabilmente trascurabile rispetto al costo dei roundtrip.