Hvorfor bruke ROWID i Oracle?


Beste svaret

Akkurat som hjemmeadressen din unikt identifiserer hvor du bor, et Oracle ROWID identifiserer unikt hvor en rad ligger på disken. Informasjonen i en ROWID gir Oracle alt han trenger for å finne raden din, disknummeret, sylinderen, blokken og forskyvet i blokken.

Rowid-verdier har flere viktige bruksområder:

  • De er den raskeste måten å få tilgang til en enkelt rad.
  • De kan vise deg hvordan radene i en tabell er lagret.
  • De er unike identifikatorer for rader i en tabell.

Du bør ikke bruke Rowid som den primære nøkkelen til en tabell. Hvis du for eksempel sletter og setter inn en rad med verktøyene Import og eksport, kan det hende at den blir endret. Hvis du sletter en rad, kan Oracle gi tildelingen av rowid til en ny rad som er satt inn senere.

Selv om du kan bruke Rowid-pseudokolonnen i Velg og Hvor ledd i et spørsmål, blir disse pseudokolonnverdiene faktisk ikke lagret i databasen. Du kan ikke sette inn, oppdatere eller slette en verdi av Rowid-pseudokolonnen.

Svar

ROWID er den fysiske plasseringen av en rad. Antar at du har en tabell uten primærnøkler. slik at denne tabellen kan ha dupliserte rader. Hvordan vil du slette dupliserte rader, men beholde nøyaktig en av den typen?

Oracle gir ROWID som en slags erstatning for primærnøkkel. Du kan skrive et nestet spørsmål som er av korrelert type [(gruppere etter alle kolonnene i raden og ta MIN (ROWID) i hver gruppe i det indre spørringen, for hver gruppe sletter du de andre radene i gruppen i ytterspørring)] ..

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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *