Wie kann ich eine Oracle-Datenbank abfragen, um die Namen aller darin enthaltenen Tabellen anzuzeigen?
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.
Versuchen Sie die Auswahl aus user_tables, die die Tabellen auflistet, die dem aktuellen Benutzer gehören.