Varför använda ROWID i Oracle?


Bästa svaret

Precis som din hemadress unikt identifierar var du bor, en Oracle ROWID identifierar unikt var en rad finns på disken. Informationen i ett ROWID ger Oracle allt han behöver för att hitta din rad, skivnummer, cylinder, block och förskjutning i blocket.

Radvärden har flera viktiga användningsområden:

  • De är det snabbaste sättet att komma åt en enda rad.
  • De kan visa hur raderna i en tabell lagras.
  • De är unika identifierare för rader i en tabell.

Du bör inte använda Rowid som den primära nyckeln i en tabell. Om du till exempel tar bort och sätter in en rad med verktygen Importera och exportera, kan dess radid ändras. Om du tar bort en rad kan Oracle tilldela dess rowid till en ny rad som infogas senare.

Även om du kan använda Rowid-pseudokolumnen i Välj och När sats i en fråga lagras dessa pseudokolumnvärden inte i databasen. Du kan inte infoga, uppdatera eller ta bort ett värde i Rowid-pseudokolumnen.

Svar

ROWID är den fysiska platsen för en rad. Antar att du har en tabell utan primära nycklar. så den här tabellen kan ha dubbla rader. Hur skulle du radera dubbletterader men behålla exakt en sådan typ?

Oracle tillhandahåller ROWID som ett slags ersättning för primärnyckel. Du kan skriva en kapslad fråga som är av korrelerad typ [(gruppera efter alla kolumner i raden och ta MIN (ROWID) i varje grupp i den inre frågan, för varje grupp ta bort de andra raderna i gruppen i ytterfrågan)] ..

till exempel:

SQL> select * from employees;

SSN NAME

---------- ----------

1 john

1 john

2 john

2 john

10 sam

11 beth

11 beth

12 beth

8 rows selected.

SQL> delete from employees where ROWID NOT IN (select min(ROWID) from employees

group by ssn,name);

2 rows deleted.

SQL> select * from employees;

SSN NAME

---------- ----------

1 john

2 john

2 john

10 sam

11 beth

12 beth

6 rows selected.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *