Liste aller Tabellen in Oracle abrufen?

Wie kann ich eine Oracle-Datenbank abfragen, um die Namen aller darin enthaltenen Tabellen anzuzeigen?

Lösung
SELECT owner, table_name
  FROM dba_tables

Dies setzt voraus, dass Sie Zugriff auf die Data-Dictionary-Ansicht DBA_TABLES haben. Wenn Sie diese Rechte nicht haben, sie aber benötigen, können Sie den DBA bitten, Ihnen explizit Rechte für diese Tabelle zu gewähren, oder der DBA kann Ihnen das Recht SELECT ANY DICTIONARY oder die Rolle SELECT_CATALOG_ROLE gewähren (beides würde Ihnen die Abfrage jeder Data-Dictionary-Tabelle ermöglichen). Natürlich können Sie bestimmte Schemata wie SYS und SYSTEM ausschließen, die eine große Anzahl von Oracle-Tabellen enthalten, die Sie wahrscheinlich nicht interessieren.

Wenn Sie keinen Zugriff auf DBA_TABLES haben, können Sie alternativ alle Tabellen, auf die Ihr Konto Zugriff hat, über die Ansicht ALL_TABLES einsehen:

SELECT owner, table_name
  FROM all_tables

Allerdings handelt es sich dabei nur um eine Teilmenge der in der Datenbank verfügbaren Tabellen (ALL_TABLES zeigt Ihnen die Informationen für alle Tabellen an, auf die Ihr Benutzer Zugriff hat).

Wenn Sie nur an den Tabellen interessiert sind, die Ihnen gehören, nicht aber an denen, auf die Sie Zugriff haben, können Sie USER_TABLES verwenden:

SELECT table_name
  FROM user_tables

Da USER_TABLES nur Informationen über die Tabellen enthält, die Ihnen gehören, hat es keine OWNER-Spalte - der Eigentümer sind per Definition Sie.

Oracle hat auch eine Reihe von alten Data-Dictionary-Ansichten - zum Beispiel TAB, DICT, TABS und CAT - die verwendet werden können. Im Allgemeinen würde ich nicht empfehlen, diese alten 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, so dass sie oft Probleme mit neueren Objekttypen haben. Die Ansichten TAB und CAT zeigen beispielsweise Informationen über Tabellen an, die sich im Papierkorb des Benutzers befinden, während die Ansichten [DBA|ALL|USER]_TABLES diese herausfiltern. CAT" zeigt auch Informationen über materialisierte Ansichtsprotokolle mit einem TABLE_TYPE von "TABLE", was wahrscheinlich nicht das ist, was Sie wirklich wollen. DICT" kombiniert Tabellen und Synonyme und sagt Ihnen nicht, wem das Objekt gehört.

Kommentare (6)

Die Abfrage von "user_tables" und "dba_tables" funktionierte nicht.
Dies hier schon:

select table_name from all_tables  
Kommentare (1)

Versuchen Sie die Auswahl aus user_tables, die die Tabellen auflistet, die dem aktuellen Benutzer gehören.

Kommentare (0)