Paras vastaus
Aivan kuten kotiosoitteesi yksilöi asuinpaikkasi, Oracle ROWID tunnistaa yksilöllisesti, missä rivi levyllä on. ROWID: n tiedot antavat Oraclelle kaiken, mitä hän tarvitsee löytääksesi rivisi, levynumeron, sylinterin, lohkon ja siirron lohkoon.
Rowid-arvot niillä on useita tärkeitä käyttötarkoituksia:
- Ne ovat nopein tapa käyttää yksittäistä riviä.
- Ne voivat näyttää, kuinka taulukon rivit tallennetaan.
- Ne ovat taulukon rivien yksilöllisiä tunnisteita.
Älä käytä Rowidia taulukon ensisijaisena avaimena. Jos poistat rivin ja lisäät sen uudelleen esimerkiksi Tuonti ja vienti -apuohjelmilla, sen rivinumero voi muuttua. Jos poistat rivin, Oracle voi määrittää rivinsä uudelleen myöhemmin lisätylle uudelle riville.
Vaikka voit käyttää Rowid-pseudosaraketta valinnassa ja Missä kyselyn lauseke, näitä näennäissarakesarjoja ei tosiasiallisesti ole tallennettu tietokantaan. Et voi lisätä, päivittää tai poistaa Rowid-näennäissarakkeen arvoa.
Vastaus
ROWID on rivin fyysinen sijainti. Oletetaan, että sinulla on taulukko ilman ensisijaisia avaimia. joten tässä taulukossa voi olla päällekkäisiä rivejä. Kuinka poistat päällekkäiset rivit, mutta pidät täsmälleen samanlaisen?
Oracle tarjoaa ROWID: n eräänlaisena korvauksena ensisijaisella avaimella. Voit kirjoittaa sisäkkäisen kyselyn, joka on vastaavaa tyyppiä [(ryhmitä rivin kaikkien sarakkeiden mukaan ja vie MIN (ROWID) kussakin ryhmässä sisäisessä kyselyssä, poista kullekin ryhmälle ryhmän muut rivit ulkokyselyssä)] ..
esimerkiksi:
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.