Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ROWID (Orakel) - irgendeine Verwendung dafür?

ROWID ist der physische Ort einer Zeile. Folglich ist es der schnellste Weg, eine Zeile zu finden, sogar schneller als eine Primärschlüsselsuche. Daher kann es bei bestimmten Arten von Transaktionen nützlich sein, bei denen wir einige Zeilen auswählen, ihre ROWIDs speichern und dann später die ROWIDs in where verwenden Klauseln für DML gegen dieselben Zeilen.

Die Oracle SELECT ... FOR UPDATE-Syntax verwendet implizit ROWID, wenn wir die gesperrte Zeile mit WHERE CURRENT OF aktualisieren. Auch die EXCEPTIONS-Tabelle (auf die verwiesen wird, wenn Einschränkungen mit der EXCEPTIONS INTO-Klausel angewendet werden) hat eine Spalte ROW_ID. Auf diese Weise können wir schnell die Zeilen identifizieren, die gegen unsere Beschränkung verstoßen.

Das letztgenannte Beispiel weist auf eine andere allgemeine Verwendung hin:Wenn wir ein generisches Stück Code schreiben und einen Mechanismus zum Speichern von UIDs benötigen, ohne Bedenken hinsichtlich Datentyp, zusammengesetzter Schlüssel usw.

ROWNUM hingegen ist eine Pseudospalte, die eine Zeile in einer bestimmten Ergebnismenge markiert. Sie hat keine bleibende Bedeutung.

bearbeiten

Die ROWID für einen bestimmten Datensatz kann sich im Laufe der Lebensdauer eines Systems ändern, beispielsweise durch einen Tabellenneuaufbau. Auch wenn ein Datensatz gelöscht wird, könnte einem neuen Datensatz diese ROWID gegeben werden. Folglich sind ROWIDs langfristig nicht als UIDs geeignet. Aber sie sind gut genug für die Verwendung innerhalb einer Transaktion.