Jak wyświetlić listę wszystkich tabel w schemacie w Oracle SQL?


Odpowiedzi:


220

Aby zobaczyć wszystkie tabele w innym schemacie, musisz mieć co najmniej jedno z następujących uprawnień systemowych:

SELECT ANY DICTIONARY
(SELECT | INSERT | UPDATE | DELETE) ANY TABLE

lub wielki młot, rola DBA.

Za pomocą dowolnego z nich możesz wybrać:

SELECT DISTINCT OWNER, OBJECT_NAME 
  FROM DBA_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'
   AND OWNER = '[some other schema]'

Bez tych uprawnień systemowych możesz wyświetlać tylko tabele, do których masz przyznany pewien poziom dostępu, bezpośrednio lub za pośrednictwem roli.

SELECT DISTINCT OWNER, OBJECT_NAME 
  FROM ALL_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'
   AND OWNER = '[some other schema]'

Wreszcie, zawsze możesz wysłać zapytanie do słownika danych o własne tabele, ponieważ Twoich praw do tabel nie można cofnąć (od 10g):

SELECT DISTINCT OBJECT_NAME 
  FROM USER_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'

2
„najbardziej kompletna odpowiedź” oprócz użycia %_OBJECTSzamiast %_TABLES.
APC

Pamiętam w 9i, że widoki byłyby wymienione w% _TABLES - więc na przykład próba zautomatyzowanego opróżniania schematu kończyłaby się poleceniami typu DROP TABLE REALLY_A_VIEW CASCADE CONSTRAINTS wyrzucającymi błędy. Musiałbyś więc albo usunąć widoki z MINUS / NIE W / NIE ISTNIEJE, albo skierować się przeciwko% _OBJECTS. Dodatkowo, przeciwstawienie się% _OBJECTS pozostawia kuszącą wskazówkę, co jeszcze może tam być!
Adam Musch,

1
W DISTINCTzapytaniu nie ma absolutnie żadnej potrzeby . owner, object_namejest wyjątkowy wALL_OBJECTS
a_horse_with_no_name

1
Te zapytania nie wymagają odrębnych, to prawda; jednakże owner, object_namenie jest w żaden sposób unikalny w dba_objects; Elementy pakietu i pakiety są wyświetlane w tym widoku, a tabele i indeksy znajdują się w różnych przestrzeniach nazw.
Adam Musch

Ostatnie zapytanie nie będzie działać, tak jak w XE 11.2. Wygląda na to, że nie ma kolumny „właściciel” w „user_objects”.
Rafael Chaves

71
SELECT table_name  from all_tables where owner = 'YOURSCHEMA';

2
Spowoduje to wyświetlenie wszystkich tabel w YOURSCHEMA tylko wtedy, gdy są prowadzone przez YOURSCHEMA lub przez użytkownika z uprawnieniami wymienionymi przez Adama Muscha. W przeciwnym razie pokazuje tylko tabele w YOURSCHEMA, do których przyznano nam uprawnienia.
APC

14

Możesz zapytać USER_TABLES

select TABLE_NAME from user_tables

5
To wszystkie tabele w TWOIM schemacie, a nie wszystkie tabele w schemacie A. Ponadto widoki słownika danych * _TABLES (DBA_TABLES, ALL_TABLES, USER_TABLES) obejmują widoki.
Adam Musch,

zamienić „uwzględnij widoki” na „może uwzględniać widoki w seme wersjach Oracle”.
Adam Musch,

@Adam Musch Testowany przy użyciu Oracle 10g R2, nie zwracał wyświetleń.
Sathyajith Bhat

4

Jeśli zalogowałeś się jako zwykły użytkownik bez pozwolenia DBA, możesz użyć następującego polecenia, aby wyświetlić wszystkie tabele i widoki własnego schematu.

select * from tab;

3

Spróbuj tego, wymień? z nazwą schematu

select TABLE_NAME from  INFORMATION_SCHEMA.TABLES
 WHERE TABLE_SCHEMA =?
  AND TABLE_TYPE = 'BASE TABLE'

3
Jest to bardziej niezależne od bazy danych, więc myślę, że tego typu rozwiązanie jest lepsze niż wszystkie alternatywy. Myślę, że INFORMATION_SCHEMA działa na prawie każdej większej bazie danych, jaką widziałem. Chociaż niektóre różnią się pod względem tego, jakie informacje można uzyskać, przynajmniej jest to spójne miejsce do wyszukiwania. Jednak po przeprowadzeniu szybkiego wyszukiwania w Internecie wydaje się, że Oracle jest prawie jedyną bazą danych, która nie obsługuje Information_Schema, mimo że jest częścią standardu SQL-92.
Kibbee

2

Jeśli uzyskujesz dostęp do Oracle za pomocą JDBC (Java), możesz użyć klasy DatabaseMetadata . Jeśli uzyskujesz dostęp do Oracle za pomocą ADO.NET, możesz użyć podobnego podejścia.

Jeśli uzyskujesz dostęp do Oracle przez ODBC, możesz użyć funkcji SQLTables .

W przeciwnym razie, jeśli potrzebujesz tylko informacji w SQLPlus lub podobnym kliencie Oracle, wystarczy jedno z wcześniej wymienionych zapytań. Na przykład:

select TABLE_NAME from user_tables


2
select TABLE_NAME from user_tables;

Powyższe zapytanie poda nazwy wszystkich tabel obecnych w tym użytkowniku;


2
select * from user_tables;

(pokazuje wszystkie tabele)


1

SELECT nazwa_tabeli, właściciel Z wszystkich_tabli, gdzie właściciel = „nazwa_schematu” kolejność według nazwa_tabeli


1

Możesz bezpośrednio uruchomić drugie zapytanie, jeśli znasz nazwę właściciela.

- Najpierw możesz wybrać wszystkich istniejących WŁAŚCICIELI:

SELECT DISTINCT(owner) from SYS.ALL_TABLES;

- Następnie możesz zobaczyć tabele pod tym właścicielem:

SELECT table_name, owner from all_tables where owner like ('%XYZ%');


0

Jeśli chcesz również uzyskać rozmiar stołu, będzie to przydatne:

select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1


0

Nazwa tabeli i licznika wierszy dla wszystkich tabel w OWNERschemacie:

SELECT table_name, num_rows counter from DBA_TABLES WHERE owner = 'OWNER'

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.