Dlaczego warto używać ROWID w Oracle?


Najlepsza odpowiedź

Tak jak adres domowy jednoznacznie identyfikuje miejsce zamieszkania, Oracle ROWID jednoznacznie identyfikuje, gdzie na dysku znajduje się wiersz. Informacje w ROWID zapewniają Oracle wszystko, czego potrzebuje, aby znaleźć wiersz, numer dysku, cylinder, blok i przesunięcie w bloku.

Wartości Rowid mają kilka ważnych zastosowań:

  • Są najszybszym sposobem na dostęp do pojedynczego wiersza.
  • Mogą pokazać, jak przechowywane są wiersze w tabeli.
  • Są to unikalne identyfikatory wierszy w tabeli.

Nie należy używać Rowid jako klucza podstawowego tabeli. Jeśli na przykład usuniesz i ponownie wstawisz wiersz za pomocą narzędzi Importuj i Eksportuj, jego identyfikator wiersza może się zmienić. Jeśli usuniesz wiersz, Oracle może ponownie przypisać jego identyfikator wiersza do nowego wiersza wstawionego później.

Chociaż możesz użyć pseudokolumny Rowid w Wybierz i W przypadku klauzuli zapytania te wartości pseudokolumn nie są w rzeczywistości przechowywane w bazie danych. Nie możesz wstawiać, aktualizować ani usuwać wartości pseudokolumny Rowid.

Odpowiedź

ROWID to fizyczne położenie wiersza. Przypuśćmy, że masz tabelę bez kluczy podstawowych. więc ta tabela może mieć zduplikowane wiersze. Jak można usunąć zduplikowane wiersze, ale zachować dokładnie jeden tego rodzaju?

Oracle zapewnia ROWID jako rodzaj substytutu klucza podstawowego. Możesz napisać zagnieżdżone zapytanie, które jest typu skorelowanego [(pogrupuj według wszystkich kolumn w wierszu i weź MIN (ROWID) w każdej grupie w zapytaniu wewnętrznym, dla każdej grupy usuń inne wiersze z grupy w zapytaniu zewnętrznym)] ..

na przykład:

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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *