@ MartinThoma nein. versuchte das zuerst, bevor er auf Google zurückgriff
Adam Burley
Antworten:
1364
SELECT owner, table_name
FROM dba_tables
Dies setzt voraus, dass Sie Zugriff auf die DBA_TABLESDatenwörterbuchansicht haben. Wenn Sie nicht über diese Berechtigungen verfügen, diese aber benötigen, können Sie anfordern, dass der DBA Ihnen explizit Berechtigungen für diese Tabelle gewährt, oder dass der DBA Ihnen die SELECT ANY DICTIONARYBerechtigungen oder die SELECT_CATALOG_ROLERolle gewährt (beide ermöglichen es Ihnen, eine beliebige Datenwörterbuchtabelle abzufragen ). Natürlich möchten Sie möglicherweise bestimmte Schemas wie SYSund SYSTEMmit einer großen Anzahl von Oracle-Tabellen ausschließen, die Sie wahrscheinlich nicht interessieren.
Wenn Sie keinen Zugriff haben DBA_TABLES, können Sie alternativ alle Tabellen ALL_TABLESanzeigen , auf die Ihr Konto über die Ansicht Zugriff hat :
SELECT owner, table_name
FROM all_tables
Dies kann jedoch eine Teilmenge der in der Datenbank verfügbaren Tabellen sein ( ALL_TABLESzeigt Ihnen die Informationen für alle Tabellen, auf die Ihr Benutzer Zugriff hat).
Wenn Sie sich nur mit den Tabellen befassen, die Sie besitzen, und nicht mit denen, auf die Sie Zugriff haben, können Sie Folgendes verwenden USER_TABLES:
SELECT table_name
FROM user_tables
Da USER_TABLESnur Informationen zu den Tabellen vorhanden sind, die Sie besitzen, gibt es keine OWNERSpalte - der Eigentümer sind per Definition Sie.
Oracle hat auch eine Reihe von Altdaten Wörterbuch views-- TAB, DICT, TABS, und CATfür example-- die verwendet werden könnten. Im Allgemeinen würde ich nicht empfehlen, diese älteren Ansichten zu verwenden, es sei denn, Sie müssen Ihre Skripte unbedingt auf Oracle 6 zurückportieren. Oracle hat diese Ansichten seit langem nicht mehr geändert, sodass sie häufig Probleme mit neueren Objekttypen haben. Beispielsweise zeigen die Ansichten TABund CATbeide Informationen zu Tabellen an, die sich im Papierkorb des Benutzers befinden, während die [DBA|ALL|USER]_TABLESAnsichten alle diese herausfiltern. CATAußerdem werden Informationen zu materialisierten Ansichtsprotokollen mit TABLE_TYPE"TABLE" angezeigt, die wahrscheinlich nicht Ihren Wünschen entsprechen. DICTkombiniert Tabellen und Synonyme und sagt Ihnen nicht, wem das Objekt gehört.
Ich erhalte eine Ausnahme "ORA-00942: Tabelle oder Ansicht existiert nicht"
Vitule
46
Dann haben Sie nicht die Berechtigung erhalten, alle Tabellen in der Datenbank anzuzeigen. Sie können die Datenwörterbuchansicht ALL_TABLES abfragen, um alle Tabellen anzuzeigen, auf die Sie zugreifen dürfen. Dies kann eine kleine Teilmenge der Tabellen in der Datenbank sein.
Justin Cave
Einfacher Fehler, wenn Sie kein alltäglicher sqlplus-Benutzer sind: Fügen Sie das End-Semikolon (';') hinzu, wenn Sie mit den obigen Befehlen keine Ergebnisse erzielen :).
Gimhani
Nur ein Hinweis, dass ab Oracle 12c eine Spalte im Datenwörterbuch dba_users vorhanden ist, mit deren Hilfe Systemtabellen aus Ihrer Ergebnismenge entfernt werden können. Die vollständige Abfrage wäre SELECT Eigentümer, Tabellenname von dba_tables, wo Eigentümer nicht in (wählen Sie Benutzername von dba_users, wo oracle_maintained = 'Y')
Saritonin
181
Abfragen user_tablesund dba_tablesnicht funktioniert.
Dieser tat:
@LimitedAtonement Sorry, das ist einfach falsch. Die Ansicht heißt user_tables, nicht user_table. Wenn user_tables für vitule nicht funktionierte, stimmte etwas anderes nicht.
Frank Schmitt
67
Wenn Sie noch einen Schritt weiter gehen, gibt es eine andere Ansicht namens cols (all_tab_columns), mit der Sie feststellen können, welche Tabellen einen bestimmten Spaltennamen enthalten.
Zum Beispiel:
SELECT table_name, column_name
FROM cols
WHERE table_name LIKE'EST%'AND column_name LIKE'%CALLREF%';
um alle Tabellen zu finden, deren Name mit EST beginnt, und Spalten, die CALLREF an einer beliebigen Stelle in ihren Namen enthalten.
Dies kann hilfreich sein, wenn Sie herausfinden möchten, an welchen Spalten Sie teilnehmen möchten, z. B. abhängig von Ihren Namenskonventionen für Tabellen und Spalten.
Ich habe select * from cols0 Zeilen zurückgegeben.
Gabe
50
Zur besseren Anzeige mit sqlplus
Wenn Sie verwenden sqlplus, möchten Sie möglicherweise zuerst einige Parameter für eine bessere Anzeige einrichten, wenn Ihre Spalten beschädigt werden (diese Variablen sollten nach dem Beenden Ihrer sqlplusSitzung nicht bestehen bleiben ):
set colsep '|'set linesize 167set pagesize 30set pagesize 1000
Alle Tabellen anzeigen
Sie können dann so etwas verwenden, um alle Tabellennamen anzuzeigen:
SELECT table_name, owner, tablespace_name FROM all_tables;
Zeigen Sie Ihre eigenen Tabellen an
Wie @Justin Cave erwähnt, können Sie damit nur Tabellen anzeigen, die Sie besitzen:
SELECT table_name FROM user_tables;
Vergessen Sie nicht die Ansichten
Beachten Sie, dass einige "Tabellen" tatsächlich "Ansichten" sein können, sodass Sie auch versuchen können, Folgendes auszuführen:
SELECT view_name FROM all_views;
Die Ergebnisse
Dies sollte etwas ergeben, das ziemlich akzeptabel aussieht wie:
Mit einem dieser Optionen können Sie Folgendes auswählen:
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';
Das stimmt eigentlich nicht. SYSDBA ist nicht erforderlich. Sie können auf viele Arten auf DBA_TABLES zugreifen. 1.) Direkte Gewährung eines Objekts an den Benutzer durch SYS. 2.) Gewährung des SELECT ANY DICTIONARY-Privilegs an den Benutzer. 3.) Gewährung der Rolle SELECT_CATALOG_ROLE.
Mark J. Bobak
4
Ich habe keine Antwort gefunden, die darauf hindeuten würde, sie zu verwenden
Unten finden Sie einen kommentierten Ausschnitt aus SQL-Abfragen, in dem beschrieben wird, wie Sie Optionen verwenden können:
-- 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;
Eine neue Funktion in SQLcl (einer kostenlosen Befehlszeilenschnittstelle für Oracle Database) ist
Tables alias.
Hier sind einige Beispiele, die die Verwendung und zusätzliche Aspekte der Funktion zeigen. Stellen Sie zunächst eine Verbindung zu einer sqlBefehlszeilensitzung ( sql.exein Windows) her. Es wird empfohlen, diesen sqlcl-spezifischen Befehl einzugeben, bevor andere Befehle oder Abfragen ausgeführt werden, in denen Daten angezeigt werden.
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
..
Um zu wissen, worauf sich der tablesAlias bezieht, können Sie einfach verwendenalias list <alias>
SQL> alias list tables
tables - tables <schema>- show tables fromschema--------------------------------------------------select table_name "TABLES"from user_tables
Sie müssen diesen Alias nicht definieren, da er standardmäßig unter SQLcl verfügbar ist. Wenn Sie Tabellen aus einem bestimmten Schema auflisten möchten, einen neuen benutzerdefinierten Alias verwenden und den Schemanamen als Bindungsargument übergeben möchten, wobei nur eine Reihe von Spalten angezeigt wird, können Sie dies verwenden
SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;
Danach können Sie einfach den Schemanamen als Argument übergeben
In der Tat ist es möglich, die Liste der Tabellen über SQL-Abfragen abzurufen. Dies ist auch über Tools möglich, mit denen Datenwörterbücher wie ERWIN , Toad Data Modeler oder ERBuilder erstellt werden können . Mit diesen Tools verfügen Sie neben Tabellennamen über Felder, deren Typen und Objekte wie (Trigger, Sequenzen, Domänen, Ansichten ...).
Führen Sie die folgenden Schritte aus, um Ihre Tabellendefinition zu generieren:
Sie müssen Ihre Datenbank zurückentwickeln
Im Toad Data Modeler: Menü -> Datei -> Reverse Engineering -> Reverse Engineering-Assistent
Im ERBuilder-Datenmodellierer: Menü -> Datei -> Reverse Engineering
Ihre Datenbank wird in der Software als Entity Relationship-Diagramm angezeigt.
Generieren Sie Ihr Datenwörterbuch, das Ihre Tabellendefinition enthält
Im Toad-Datenmodellierer: Menü -> Modell -> Bericht erstellen -> Ausführen
Im ERBuilder-Datenmodellierer: Menü -> Werkzeug -> Modelldokumentation generieren
SHOW TABLES
(wie in MySQL)?Antworten:
Dies setzt voraus, dass Sie Zugriff auf die
DBA_TABLES
Datenwörterbuchansicht haben. Wenn Sie nicht über diese Berechtigungen verfügen, diese aber benötigen, können Sie anfordern, dass der DBA Ihnen explizit Berechtigungen für diese Tabelle gewährt, oder dass der DBA Ihnen dieSELECT ANY DICTIONARY
Berechtigungen oder dieSELECT_CATALOG_ROLE
Rolle gewährt (beide ermöglichen es Ihnen, eine beliebige Datenwörterbuchtabelle abzufragen ). Natürlich möchten Sie möglicherweise bestimmte Schemas wieSYS
undSYSTEM
mit einer großen Anzahl von Oracle-Tabellen ausschließen, die Sie wahrscheinlich nicht interessieren.Wenn Sie keinen Zugriff haben
DBA_TABLES
, können Sie alternativ alle TabellenALL_TABLES
anzeigen , auf die Ihr Konto über die Ansicht Zugriff hat :Dies kann jedoch eine Teilmenge der in der Datenbank verfügbaren Tabellen sein (
ALL_TABLES
zeigt Ihnen die Informationen für alle Tabellen, auf die Ihr Benutzer Zugriff hat).Wenn Sie sich nur mit den Tabellen befassen, die Sie besitzen, und nicht mit denen, auf die Sie Zugriff haben, können Sie Folgendes verwenden
USER_TABLES
:Da
USER_TABLES
nur Informationen zu den Tabellen vorhanden sind, die Sie besitzen, gibt es keineOWNER
Spalte - der Eigentümer sind per Definition Sie.Oracle hat auch eine Reihe von Altdaten Wörterbuch views--
TAB
,DICT
,TABS
, undCAT
für example-- die verwendet werden könnten. Im Allgemeinen würde ich nicht empfehlen, diese älteren Ansichten zu verwenden, es sei denn, Sie müssen Ihre Skripte unbedingt auf Oracle 6 zurückportieren. Oracle hat diese Ansichten seit langem nicht mehr geändert, sodass sie häufig Probleme mit neueren Objekttypen haben. Beispielsweise zeigen die AnsichtenTAB
undCAT
beide Informationen zu Tabellen an, die sich im Papierkorb des Benutzers befinden, während die[DBA|ALL|USER]_TABLES
Ansichten alle diese herausfiltern.CAT
Außerdem werden Informationen zu materialisierten Ansichtsprotokollen mitTABLE_TYPE
"TABLE" angezeigt, die wahrscheinlich nicht Ihren Wünschen entsprechen.DICT
kombiniert Tabellen und Synonyme und sagt Ihnen nicht, wem das Objekt gehört.quelle
Abfragen
user_tables
unddba_tables
nicht funktioniert.Dieser tat:
quelle
Wenn Sie noch einen Schritt weiter gehen, gibt es eine andere Ansicht namens cols (all_tab_columns), mit der Sie feststellen können, welche Tabellen einen bestimmten Spaltennamen enthalten.
Zum Beispiel:
um alle Tabellen zu finden, deren Name mit EST beginnt, und Spalten, die CALLREF an einer beliebigen Stelle in ihren Namen enthalten.
Dies kann hilfreich sein, wenn Sie herausfinden möchten, an welchen Spalten Sie teilnehmen möchten, z. B. abhängig von Ihren Namenskonventionen für Tabellen und Spalten.
quelle
select * from cols
0 Zeilen zurückgegeben.Zur besseren Anzeige mit
sqlplus
Wenn Sie verwenden
sqlplus
, möchten Sie möglicherweise zuerst einige Parameter für eine bessere Anzeige einrichten, wenn Ihre Spalten beschädigt werden (diese Variablen sollten nach dem Beenden Ihrersqlplus
Sitzung nicht bestehen bleiben ):Alle Tabellen anzeigen
Sie können dann so etwas verwenden, um alle Tabellennamen anzuzeigen:
Zeigen Sie Ihre eigenen Tabellen an
Wie @Justin Cave erwähnt, können Sie damit nur Tabellen anzeigen, die Sie besitzen:
Vergessen Sie nicht die Ansichten
Beachten Sie, dass einige "Tabellen" tatsächlich "Ansichten" sein können, sodass Sie auch versuchen können, Folgendes auszuführen:
Die Ergebnisse
Dies sollte etwas ergeben, das ziemlich akzeptabel aussieht wie:
quelle
pagesize 30
mitpagesize 1000
?Einfache Abfrage zum Auswählen der Tabellen für den aktuellen Benutzer:
quelle
----------------ODER------------------
----------------ODER------------------
quelle
Probieren Sie die folgenden Datenwörterbuchansichten aus.
quelle
Versuchen Sie, aus user_tables auszuwählen, in denen die Tabellen aufgelistet sind, deren Eigentümer der aktuelle Benutzer ist.
quelle
Oracle-Datenbank zum Anzeigen der Namen aller Tabellen mithilfe der folgenden Abfrage
Besuchen Sie mehr: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html
quelle
Mit einem dieser Optionen können Sie Folgendes auswählen:
quelle
Gibt alle Tabellen aller Benutzer nur an, wenn der Benutzer, mit dem Sie sich angemeldet haben, über die
sysdba
Berechtigungen verfügt.quelle
Ich habe keine Antwort gefunden, die darauf hindeuten würde, sie zu verwenden
Also habe ich beschlossen, auch meine Version hinzuzufügen. Diese Ansicht gibt tatsächlich mehr als DBA_TABLES zurück, da sie auch Objekttabellen zurückgibt ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ).
quelle
Sie können Oracle Data Dictionary verwenden , um Informationen zu Oracle-Objekten abzurufen.
Sie können eine Liste von Tabellen auf verschiedene Arten erhalten:
oder zum Beispiel:
Dann können Sie Tabellenspalten unter Verwendung des Tabellennamens erhalten:
Dann können Sie eine Liste der Abhängigkeiten (Trigger, Ansichten usw.) erhalten:
Dann können Sie die Textquelle dieser Objekte erhalten:
Und Sie können
USER
oderALL
Ansichten anstelle von verwenden,DBA
wenn Sie möchten.quelle
Einschließlich Ansichten:
quelle
Wir können alle Tabellen einschließlich der Spaltendetails aus der folgenden Abfrage abrufen:
quelle
Unten finden Sie einen kommentierten Ausschnitt aus SQL-Abfragen, in dem beschrieben wird, wie Sie Optionen verwenden können:
quelle
Die folgende Abfrage listet nur die erforderlichen Daten auf, während die anderen Antworten mir die zusätzlichen Daten gaben, die mich nur verwirrten.
quelle
Eine neue Funktion in SQLcl (einer kostenlosen Befehlszeilenschnittstelle für Oracle Database) ist
Tables
alias.Hier sind einige Beispiele, die die Verwendung und zusätzliche Aspekte der Funktion zeigen. Stellen Sie zunächst eine Verbindung zu einer
sql
Befehlszeilensitzung (sql.exe
in Windows) her. Es wird empfohlen, diesen sqlcl-spezifischen Befehl einzugeben, bevor andere Befehle oder Abfragen ausgeführt werden, in denen Daten angezeigt werden.SQL> tables
Um zu wissen, worauf sich der
tables
Alias bezieht, können Sie einfach verwendenalias list <alias>
Sie müssen diesen Alias nicht definieren, da er standardmäßig unter SQLcl verfügbar ist. Wenn Sie Tabellen aus einem bestimmten Schema auflisten möchten, einen neuen benutzerdefinierten Alias verwenden und den Schemanamen als Bindungsargument übergeben möchten, wobei nur eine Reihe von Spalten angezeigt wird, können Sie dies verwenden
SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;
Danach können Sie einfach den Schemanamen als Argument übergeben
SQL> tables_schema HR
Ein komplexerer vordefinierter Alias ist bekannt als
Tables2
, der mehrere andere Spalten anzeigt.Geben Sie ein, um zu erfahren, welche Abfrage im Hintergrund ausgeführt wird
Dies zeigt Ihnen eine etwas komplexere Abfrage zusammen mit vordefinierten
column
Definitionen, die üblicherweise in SQL * Plus verwendet werden.Jeff Smith erklärt mehr über Aliase hier
quelle
Ich wollte eine Liste aller Spaltennamen erhalten, die zu einer Tabelle eines Schemas gehören, sortiert nach der Reihenfolge der Spalten-ID.
Hier ist die Abfrage, die ich verwende: -
quelle
In der Tat ist es möglich, die Liste der Tabellen über SQL-Abfragen abzurufen. Dies ist auch über Tools möglich, mit denen Datenwörterbücher wie ERWIN , Toad Data Modeler oder ERBuilder erstellt werden können . Mit diesen Tools verfügen Sie neben Tabellennamen über Felder, deren Typen und Objekte wie (Trigger, Sequenzen, Domänen, Ansichten ...).
Führen Sie die folgenden Schritte aus, um Ihre Tabellendefinition zu generieren:
Ihre Datenbank wird in der Software als Entity Relationship-Diagramm angezeigt.
quelle
Dieses zusätzliche "Alle" am Anfang gibt zusätzliche 3 Spalten, die sind:
quelle