Pobierz listę wszystkich tabel w Oracle?

Jak mogę wyświetlić nazwy wszystkich tabel w bazie danych Oracle?

Rozwiązanie
SELECT owner, table_name
  FROM dba_tables

To jest zakładając, że masz dostęp do widoku słownika danych DBA_TABLES. Jeśli nie posiadasz tych uprawnień, ale ich potrzebujesz, możesz poprosić DBA o jawne nadanie uprawnień do tej tabeli lub o nadanie uprawnienia SELECT ANY DICTIONARY lub roli SELECT_CATALOG_ROLE (oba te uprawnienia pozwalają na zapytanie do dowolnej tabeli słownika danych). Oczywiście, możesz chcieć wykluczyć pewne schematy, takie jak SYS i SYSTEM, które zawierają dużą liczbę tabel Oracle, które prawdopodobnie nie są dla Ciebie ważne.

Alternatywnie, jeśli nie masz dostępu do DBA_TABLES, możesz zobaczyć wszystkie tabele, do których Twoje konto ma dostęp poprzez widok ALL_TABLES:

SELECT owner, table_name
  FROM all_tables

Chociaż może to być podzbiór tabel dostępnych w bazie danych (ALL_TABLES pokazuje informacje dla wszystkich tabel, do których użytkownik ma dostęp).

Jeśli interesują Cię tylko tabele, które posiadasz, a nie te, do których masz dostęp, możesz użyć USER_TABLES:

SELECT table_name
  FROM user_tables

Ponieważ USER_TABLES zawiera tylko informacje o tabelach, których jesteś właścicielem, nie posiada kolumny OWNER - właścicielem, z definicji, jesteś Ty.

Oracle posiada również wiele starszych widoków słownika danych - TAB, DICT, TABS i CAT na przykład - które mogą być użyte. Ogólnie rzecz biorąc, nie sugerowałbym używania tych widoków, chyba że absolutnie musisz wykonać backport swoich skryptów do Oracle 6. Oracle nie zmieniło tych widoków przez długi czas, więc często mają one problemy z nowszymi typami obiektów. Na przykład, widoki TAB i CAT pokazują informacje o tabelach, które są w koszu użytkownika' podczas gdy widoki [DBA|ALL|USER]_TABLES odfiltrowują je. CAT pokazuje również informacje o logach widoku zmaterializowanego z TABLE_TYPE o wartości "TABLE", co jest mało prawdopodobne, aby było tym, czego naprawdę chcesz. DICT łączy tabele i synonimy i'nie mówi kto jest właścicielem obiektu.

Komentarze (6)

Zapytania do user_tables i dba_tables nie działały'.
To zadziałało:

select table_name from all_tables  
Komentarze (1)

Spróbuj wybrać z user_tables, który wyświetla tabele należące do bieżącego użytkownika.

Komentarze (0)