Proč používat ROWID v Oracle?


Nejlepší odpověď

Stejně jako vaše domácí adresa jednoznačně identifikuje, kde bydlíte, Oracle ROWID jednoznačně identifikuje, kde se řádek nachází na disku. Informace v ROWID poskytují Oracle vše, co potřebuje k nalezení vašeho řádku, čísla disku, válce, bloku a posunutí do bloku.

Hodnoty řádků mají několik důležitých použití:

  • Jedná se o nejrychlejší způsob přístupu k jednomu řádku.
  • Mohou vám ukázat, jak jsou řádky v tabulce uloženy.
  • Jedná se o jedinečné identifikátory řádků v tabulce.

Rowid byste neměli používat jako primární klíč tabulky. Pokud například odstraníte a znovu vložíte řádek pomocí obslužných programů Import a Export, může se změnit jeho řádek. Pokud řádek smažete, může společnost Oracle znovu přiřadit svůj řádek do nového řádku vloženého později.

Ačkoli můžete použít pseudocolumn Rowid v Vyberte and Kde klauzule dotazu, tyto hodnoty pseudocolumn nejsou ve skutečnosti uloženy v databázi. Nelze vložit, aktualizovat nebo odstranit hodnotu pseudocolumn Rowid.

Odpověď

ROWID je fyzické umístění řádku. Předpokládejme, že máte tabulku bez primárních klíčů. takže tato tabulka může mít duplicitní řádky. Jak byste odstranili duplicitní řádky, ale ponechali byste si přesně jeden svého druhu?

Oracle poskytuje ROWID jako druh náhrady za primární klíč. Můžete napsat vnořený dotaz, který je korelovaného typu [(seskupit podle všech sloupců v řádku a vzít MIN (ROWID) v každé skupině do vnitřního dotazu, pro každou skupinu smazat ostatní řádky ve skupině ve vnějším dotazu)] ..

například:

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *