Hvorfor bruge ROWID i Oracle?


Bedste svar

Ligesom din hjemmeadresse entydigt identificerer, hvor du bor, er en Oracle ROWID identificerer entydigt, hvor en række findes på disken. Oplysningerne i et ROWID giver Oracle alt, hvad han har brug for for at finde din række, disknummeret, cylinderen, blokken og forskydningen i blokken.

Rowid-værdier har flere vigtige anvendelser:

  • De er den hurtigste måde at få adgang til en enkelt række.
  • De kan vise dig, hvordan rækkerne i en tabel er gemt.
  • De er unikke identifikatorer for rækker i en tabel.

Du bør ikke bruge Rowid som den primære nøgle i en tabel. Hvis du f.eks. Sletter og indsætter en række med import- og eksportværktøjerne, ændres dens række muligvis. Hvis du sletter en række, kan Oracle muligvis tildele sin rowid til en ny række indsat senere.

Selvom du kan bruge Rowid-pseudokolonnen i Vælg og Hvor klausul i en forespørgsel, er disse pseudokolumneværdier faktisk ikke gemt i databasen. Du kan ikke indsætte, opdatere eller slette en værdi af Rowid-pseudokolonnen.

Svar

ROWID er den fysiske placering af en række. Antag at du har en tabel uden primære nøgler. så denne tabel kan have dobbelte rækker. Hvordan ville du slette duplikatrækker, men beholde nøjagtigt en af ​​den slags?

Oracle leverer ROWID som en slags erstatning for primærnøgle. Du kan skrive en indlejret forespørgsel, der er af korreleret type [(gruppe efter alle kolonner i rækken og tag MIN (ROWID) i hver gruppe i den indre forespørgsel, for hver gruppe skal du slette de andre rækker i gruppen i ydre forespørgsel)] ..

for eksempel:

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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *