Jak mogę wyświetlić nazwy wszystkich tabel w bazie danych Oracle?
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.