@MartinThoma nope. wypróbowałem to najpierw, zanim skorzystałem z Google
Adam Burley
Odpowiedzi:
1364
SELECT owner, table_name
FROM dba_tables
Zakłada się, że masz dostęp do DBA_TABLESwidoku słownika danych. Jeśli nie masz tych uprawnień, ale potrzebujesz ich, możesz zażądać, aby DBA jawnie przyznało ci uprawnienia do tej tabeli, lub że DBA przyznaje ci SELECT ANY DICTIONARYuprawnienia lub SELECT_CATALOG_ROLErolę (które pozwolą ci na zapytanie dowolnej tabeli słownika danych) ). Oczywiście, można wykluczyć pewnych schematów jak SYSi SYSTEMktóre mają dużą liczbę tabel Oracle, że prawdopodobnie nie obchodzi.
Alternatywnie, jeśli nie masz dostępu DBA_TABLES, możesz zobaczyć wszystkie tabele, do których twoje konto ma dostęp poprzez ALL_TABLESwidok:
SELECT owner, table_name
FROM all_tables
Chociaż może to być podzbiór tabel dostępnych w bazie danych ( ALL_TABLESpokazuje informacje o wszystkich tabelach, do których użytkownik uzyskał 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_TABLESma tylko informacje o tabelach, które posiadasz, nie ma OWNERkolumny - właścicielem z definicji jesteś ty.
Oracle ma również szereg dotychczasowych danych słownika views-- TAB, DICT, TABS, i CATdla example-- które mogłyby zostać wykorzystane. Zasadniczo nie sugerowałbym używania tych starszych widoków, chyba że absolutnie musisz przenieść swoje skrypty do Oracle 6. Oracle długo nie zmieniało tych widoków, więc często mają problemy z nowszymi typami obiektów. Na przykład oba widoki TABi CATpokazują informacje o tabelach znajdujących się w koszu użytkownika, podczas gdy [DBA|ALL|USER]_TABLESwszystkie widoki je odfiltrowują. CATpokazuje również informacje o zmaterializowanych dziennikach widoku za pomocą TABLE_TYPE„TABELI”, co prawdopodobnie nie będzie tym, czego naprawdę chcesz. DICTłączy tabele i synonimy i nie mówi, kto jest właścicielem obiektu.
Otrzymuję wyjątek „ORA-00942: tabela lub widok nie istnieje”
vitule
45
Wtedy nie masz uprawnień, aby zobaczyć wszystkie tabele w bazie danych. Możesz przeszukać widok słownika danych ALL_TABLES, aby zobaczyć wszystkie tabele, do których masz dostęp, co może być małym podzbiorem tabel w bazie danych.
Justin Cave
Prosty błąd, jeśli nie zwykły użytkownik sqlplus: dodaj końcowy średnik (';'), jeśli po prostu nie otrzymujesz wyników z powyższymi poleceniami :).
Gimhani
Uwaga: od wersji Oracle 12c w słowniku danych dba_users znajduje się kolumna, która pomaga usunąć tabele systemowe z zestawu wyników. Pełne zapytanie brzmiałoby WYBIERZ właściciela, nazwa_tabeli z tabeli dba_tabeli właściciela nie ma w (wybierz nazwę użytkownika z dba_users gdzie oracle_maintained = 'Y')
saritonin
181
Zapytania user_tablesi dba_tablesnie działały.
Ten zrobił:
@LimitedAtonement Przepraszamy, to po prostu źle. Widok nazywa się tabelami użytkowników, a nie tabelami użytkowników. Jeśli tabele użytkownika nie działały dla vitule, coś innego było nie tak.
Frank Schmitt
67
Idąc o krok dalej, istnieje inny widok o nazwie cols (all_tab_columns), którego można użyć do ustalenia, które tabele zawierają daną nazwę kolumny.
Na przykład:
SELECT table_name, column_name
FROM cols
WHERE table_name LIKE'EST%'AND column_name LIKE'%CALLREF%';
aby znaleźć wszystkie tabele o nazwie zaczynającej się od EST i kolumny zawierające CALLREF w dowolnym miejscu ich nazw.
Może to pomóc w określeniu, do których kolumn chcesz dołączyć, na przykład w zależności od konwencji nazewnictwa tabel i kolumn.
Zrobiłem select * from colsi otrzymałem 0 wierszy.
Gabe
50
Dla lepszego oglądania dzięki sqlplus
Jeśli używasz, sqlplusmożesz najpierw ustawić kilka parametrów dla lepszego oglądania, jeśli kolumny są zniekształcone (te zmienne nie powinny się utrzymywać po zakończeniu sqlplussesji):
set colsep '|'set linesize 167set pagesize 30set pagesize 1000
Pokaż wszystkie tabele
Następnie możesz użyć czegoś takiego, aby zobaczyć wszystkie nazwy tabel:
SELECT table_name, owner, tablespace_name FROM all_tables;
Pokaż stoły, które posiadasz
Jak wspomina @Justin Cave, możesz użyć tego, aby wyświetlić tylko stoły, które posiadasz:
SELECT table_name FROM user_tables;
Nie zapomnij o widokach
Pamiętaj, że niektóre „tabele” mogą w rzeczywistości być „widokami”, więc możesz także spróbować uruchomić coś takiego:
SELECT view_name FROM all_views;
Wyniki
Powinno to dać coś, co wygląda dość akceptowalnie, na przykład:
SELECTDISTINCT OWNER, OBJECT_NAME
FROM DBA_OBJECTS
WHERE OBJECT_TYPE ='TABLE'AND OWNER='SOME_SCHEMA_NAME';SELECTDISTINCT OWNER, OBJECT_NAME
FROM ALL_OBJECTS
WHERE OBJECT_TYPE ='TABLE'AND OWNER='SOME_SCHEMA_NAME';
To właściwie nie jest poprawne. SYSDBA nie jest wymagana. Dostęp do DBA_TABLES można uzyskać na wiele sposobów. 1.) Bezpośrednie przyznanie obiektu obiektowi przez SYS. 2.) Przyznaj użytkownikowi uprawnienie WYBIERZ DOWOLNY SŁOWNIK. 3.) Przyznaj rolę SELECT_CATALOG_ROLE.
Mark J. Bobak
4
Nie znalazłem odpowiedzi, która wskazywałaby na użycie
Poniżej znajduje się skomentowany fragment zapytań SQL opisujący, w jaki sposób możesz skorzystać z opcji:
-- need to have select catalog roleSELECT*FROM dba_tables;-- to see tables of your schemaSELECT*FROM user_tables;-- tables inside your schema and tables of other schema which you possess select grants onSELECT*FROM all_tables;
Nowa funkcja dostępna w SQLcl (który jest bezpłatnym interfejsem wiersza poleceń dla Oracle Database)
Tables Alias.
Oto kilka przykładów pokazujących użycie i dodatkowe aspekty tej funkcji. Najpierw połącz się z sesją sqlwiersza poleceń ( sql.exew systemie Windows). Zaleca się wpisanie tego polecenia specyficznego dla sqlcl przed uruchomieniem jakichkolwiek innych poleceń lub zapytań wyświetlających dane.
SQL>set sqlformat ansiconsole -- resizes the columns to the width of the -- data to save space
SQL> tables
TABLES
-----------
REGIONS
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
..
Aby wiedzieć, do czego tablesodnosi się alias, możesz po prostu użyćalias list <alias>
SQL> alias list tables
tables - tables <schema>- show tables fromschema--------------------------------------------------select table_name "TABLES"from user_tables
Nie musisz definiować tego aliasu, ponieważ domyślnie jest on dostępny w SQLcl. Jeśli chcesz wyświetlić tabele z określonego schematu, używając nowego aliasu zdefiniowanego przez użytkownika i przekazując nazwę schematu jako argument powiązania z wyświetlanym tylko zestawem kolumn, możesz to zrobić za pomocą
SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;
Następnie możesz po prostu przekazać nazwę schematu jako argument
Rzeczywiście, możliwe jest tworzenie listy tabel za pomocą zapytań SQL. Można to również zrobić za pomocą narzędzi, które pozwalają na generowanie słowników danych, takich jak ERWIN , Toad Data Modeler lub ERBuilder . Dzięki tym narzędziom oprócz nazw tabel będziesz mieć pola, ich typy, obiekty takie jak (wyzwalacze, sekwencje, domena, widoki ...)
Poniższe kroki do wygenerowania definicji tabel:
Musisz odtworzyć bazę danych
W narzędziu do modelowania danych Toad: Menu -> Plik -> inżynier wsteczny -> kreator inżynierii wstecznej
W narzędziu do modelowania danych ERBuilder: Menu -> Plik -> inżynier wsteczny
Twoja baza danych zostanie wyświetlona w oprogramowaniu jako diagram relacji encji.
Wygeneruj słownik danych, który będzie zawierał definicję tabel
W narzędziu do modelowania danych Toad: Menu -> Model -> Wygeneruj raport -> Uruchom
W narzędziu do modelowania danych ERBuilder: Menu -> Narzędzie -> wygeneruj dokumentację modelu
SHOW TABLES
(jak zrobiono w MySQL) działa?Odpowiedzi:
Zakłada się, że masz dostęp do
DBA_TABLES
widoku słownika danych. Jeśli nie masz tych uprawnień, ale potrzebujesz ich, możesz zażądać, aby DBA jawnie przyznało ci uprawnienia do tej tabeli, lub że DBA przyznaje ciSELECT ANY DICTIONARY
uprawnienia lubSELECT_CATALOG_ROLE
rolę (które pozwolą ci na zapytanie dowolnej tabeli słownika danych) ). Oczywiście, można wykluczyć pewnych schematów jakSYS
iSYSTEM
które mają dużą liczbę tabel Oracle, że prawdopodobnie nie obchodzi.Alternatywnie, jeśli nie masz dostępu
DBA_TABLES
, możesz zobaczyć wszystkie tabele, do których twoje konto ma dostęp poprzezALL_TABLES
widok:Chociaż może to być podzbiór tabel dostępnych w bazie danych (
ALL_TABLES
pokazuje informacje o wszystkich tabelach, do których użytkownik uzyskał 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
:Ponieważ
USER_TABLES
ma tylko informacje o tabelach, które posiadasz, nie maOWNER
kolumny - właścicielem z definicji jesteś ty.Oracle ma również szereg dotychczasowych danych słownika views--
TAB
,DICT
,TABS
, iCAT
dla example-- które mogłyby zostać wykorzystane. Zasadniczo nie sugerowałbym używania tych starszych widoków, chyba że absolutnie musisz przenieść swoje skrypty do Oracle 6. Oracle długo nie zmieniało tych widoków, więc często mają problemy z nowszymi typami obiektów. Na przykład oba widokiTAB
iCAT
pokazują informacje o tabelach znajdujących się w koszu użytkownika, podczas gdy[DBA|ALL|USER]_TABLES
wszystkie widoki je odfiltrowują.CAT
pokazuje również informacje o zmaterializowanych dziennikach widoku za pomocąTABLE_TYPE
„TABELI”, co prawdopodobnie nie będzie tym, czego naprawdę chcesz.DICT
łączy tabele i synonimy i nie mówi, kto jest właścicielem obiektu.źródło
Zapytania
user_tables
idba_tables
nie działały.Ten zrobił:
źródło
Idąc o krok dalej, istnieje inny widok o nazwie cols (all_tab_columns), którego można użyć do ustalenia, które tabele zawierają daną nazwę kolumny.
Na przykład:
aby znaleźć wszystkie tabele o nazwie zaczynającej się od EST i kolumny zawierające CALLREF w dowolnym miejscu ich nazw.
Może to pomóc w określeniu, do których kolumn chcesz dołączyć, na przykład w zależności od konwencji nazewnictwa tabel i kolumn.
źródło
select * from cols
i otrzymałem 0 wierszy.Dla lepszego oglądania dzięki
sqlplus
Jeśli używasz,
sqlplus
możesz najpierw ustawić kilka parametrów dla lepszego oglądania, jeśli kolumny są zniekształcone (te zmienne nie powinny się utrzymywać po zakończeniusqlplus
sesji):Pokaż wszystkie tabele
Następnie możesz użyć czegoś takiego, aby zobaczyć wszystkie nazwy tabel:
Pokaż stoły, które posiadasz
Jak wspomina @Justin Cave, możesz użyć tego, aby wyświetlić tylko stoły, które posiadasz:
Nie zapomnij o widokach
Pamiętaj, że niektóre „tabele” mogą w rzeczywistości być „widokami”, więc możesz także spróbować uruchomić coś takiego:
Wyniki
Powinno to dać coś, co wygląda dość akceptowalnie, na przykład:
źródło
pagesize 30
zpagesize 1000
?Proste zapytanie, aby wybrać tabele dla bieżącego użytkownika:
źródło
----------------LUB------------------
----------------LUB------------------
źródło
Wypróbuj poniższe widoki słownika danych.
źródło
Spróbuj wybrać z tabel_użytkowników, które zawierają tabele należące do bieżącego użytkownika.
źródło
Baza danych Oracle do wyświetlania nazw wszystkich tabel przy użyciu poniższego zapytania
zobacz więcej: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html
źródło
Za pomocą dowolnego z nich możesz wybrać:
źródło
daje wszystkie tabele wszystkich użytkowników tylko wtedy, gdy użytkownik, z którym się zalogowałeś, ma
sysdba
uprawnienia.źródło
Nie znalazłem odpowiedzi, która wskazywałaby na użycie
więc postanowiłem również dodać moją wersję. Ten widok faktycznie zwraca więcej niż DBA_TABLES, ponieważ zwraca również tabele obiektów ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ).
źródło
Możesz użyć Oracle Data Dictionary, aby uzyskać informacje o obiektach Oracle.
Możesz uzyskać listę tabel na różne sposoby:
lub na przykład:
Następnie możesz uzyskać kolumny tabeli, używając nazwy tabeli:
Następnie możesz uzyskać listę zależności (wyzwalacze, widoki itp.):
Następnie możesz uzyskać źródło tekstu tych obiektów:
I możesz użyć
USER
lubALL
widoki zamiast,DBA
jeśli chcesz.źródło
W tym widoki:
źródło
Możemy uzyskać wszystkie tabele, w tym szczegóły kolumn z poniższego zapytania:
źródło
Poniżej znajduje się skomentowany fragment zapytań SQL opisujący, w jaki sposób możesz skorzystać z opcji:
źródło
Poniższe zapytanie zawiera tylko wymagane dane, podczas gdy inne odpowiedzi dały mi dodatkowe dane, które tylko mnie pomieszały.
źródło
Nowa funkcja dostępna w SQLcl (który jest bezpłatnym interfejsem wiersza poleceń dla Oracle Database)
Tables
Alias.Oto kilka przykładów pokazujących użycie i dodatkowe aspekty tej funkcji. Najpierw połącz się z sesją
sql
wiersza poleceń (sql.exe
w systemie Windows). Zaleca się wpisanie tego polecenia specyficznego dla sqlcl przed uruchomieniem jakichkolwiek innych poleceń lub zapytań wyświetlających dane.SQL> tables
Aby wiedzieć, do czego
tables
odnosi się alias, możesz po prostu użyćalias list <alias>
Nie musisz definiować tego aliasu, ponieważ domyślnie jest on dostępny w SQLcl. Jeśli chcesz wyświetlić tabele z określonego schematu, używając nowego aliasu zdefiniowanego przez użytkownika i przekazując nazwę schematu jako argument powiązania z wyświetlanym tylko zestawem kolumn, możesz to zrobić za pomocą
SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;
Następnie możesz po prostu przekazać nazwę schematu jako argument
SQL> tables_schema HR
Bardziej zaawansowany predefiniowany alias jest znany jako
Tables2
, który wyświetla kilka innych kolumn.Aby dowiedzieć się, jakie zapytanie działa w tle, wpisz
Spowoduje to wyświetlenie nieco bardziej złożonego zapytania wraz ze wstępnie zdefiniowanymi
column
definicjami powszechnie używanymi w SQL * Plus.Jeff Smith wyjaśnia więcej na temat aliasów tutaj
źródło
Chciałem uzyskać listę wszystkich nazw kolumn należących do tabeli schematu posortowanej według kolejności id kolumny.
Oto zapytanie, którego używam: -
źródło
Rzeczywiście, możliwe jest tworzenie listy tabel za pomocą zapytań SQL. Można to również zrobić za pomocą narzędzi, które pozwalają na generowanie słowników danych, takich jak ERWIN , Toad Data Modeler lub ERBuilder . Dzięki tym narzędziom oprócz nazw tabel będziesz mieć pola, ich typy, obiekty takie jak (wyzwalacze, sekwencje, domena, widoki ...)
Poniższe kroki do wygenerowania definicji tabel:
Twoja baza danych zostanie wyświetlona w oprogramowaniu jako diagram relacji encji.
źródło
to dodatkowe „wszystko” na początku daje dodatkowe 3 kolumny, które są:
źródło