Wie frage ich eine Oracle-Datenbank ab, um die Namen aller darin enthaltenen Tabellen anzuzeigen?
Wie frage ich eine Oracle-Datenbank ab, um die Namen aller darin enthaltenen Tabellen anzuzeigen?
SELECT owner, table_name
FROM dba_tables
Dies setzt voraus, dass Sie Zugriff auf die DBA_TABLES
Datenwörterbuchansicht. Wenn Sie diese Berechtigungen nicht besitzen, diese aber benötigen, können Sie anfordern, dass der DBA Ihnen explizit Berechtigungen für diese Tabelle erteilt oder dass der DBA Ihnen die Rechte gewährt SELECT ANY DICTIONARY
Privileg oder der SELECT_CATALOG_ROLE
Rolle (eine davon würde Ihnen erlauben, jede Datenwörterbuch-Tabelle abzufragen). Natürlich möchten Sie vielleicht bestimmte Schemata ausschließen SYS
und SYSTEM
mit einer großen Anzahl von Oracle-Tabellen, die Sie wahrscheinlich nicht interessieren.
Alternativ, wenn Sie keinen Zugriff auf haben DBA_TABLES
Sie können alle Tabellen sehen, auf die Ihr Konto über das Konto zugreifen kann ALL_TABLES
Aussicht:
SELECT owner, table_name
FROM all_tables
Obwohl dies eine Untermenge der in der Datenbank verfügbaren Tabellen sein kann (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 an denen, auf die Sie Zugriff haben, können Sie sie verwenden USER_TABLES
:
SELECT table_name
FROM user_tables
Schon seit USER_TABLES
hat nur Informationen über die Tabellen, die Sie besitzen, es hat keine OWNER
Spalte - der Besitzer, per Definition, bist du.
Oracle hat auch eine Reihe von älteren Data Dictionary Views-- TAB
, DICT
, TABS
, und CAT
zum Beispiel - das könnte verwendet werden. Im Allgemeinen würde ich nicht empfehlen, diese Legacy-Ansichten zu verwenden, es sei denn, Sie müssen Ihre Skripts unbedingt nach Oracle 6 zurückportieren. Oracle hat diese Ansichten seit langer Zeit nicht mehr geändert, sodass sie häufig Probleme mit neueren Objekttypen haben. Zum Beispiel, die TAB
und CAT
Ansichten zeigen Informationen über Tabellen an, die sich im Papierkorb des Benutzers befinden [DBA|ALL|USER]_TABLES
Ansichten filtern alle diese heraus. CAT
Zeigt außerdem Informationen zu materialisierten Ansichtsprotokollen mit a an 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.
Abfrage user_tables
und dba_tables
hat nicht funktioniert.
Dieser hat getan:
select table_name from all_tables
Einen Schritt weiter geht es mit einer anderen Ansicht namens cols (all_tab_columns), die verwendet werden kann, um festzustellen, welche Tabellen einen bestimmten Spaltennamen enthalten.
Beispielsweise:
SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';
um alle Tabellen zu finden, die einen Namen haben, der mit EST beginnt und Spalten, die CALLREF irgendwo in ihrem Namen enthalten.
Dies kann hilfreich sein, wenn Sie zum Beispiel herausfinden wollen, an welchen Spalten Sie teilnehmen möchten, abhängig von den Konventionen für die Benennung von Tabellen und Spalten.
sqlplus
Wenn du es benutzt sqlplus
Vielleicht möchten Sie zuerst ein paar Parameter für eine schönere Ansicht einrichten, wenn Ihre Spalten nicht mehr funktionieren (diese Variablen sollten nicht bestehen bleiben, nachdem Sie Ihre Datenbank verlassen haben) sqlplus
Sitzung):
set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000
Sie können dann so etwas verwenden, um alle Tabellennamen zu sehen:
SELECT table_name, owner, tablespace_name FROM all_tables;
Wie @Justin Cave erwähnt, können Sie damit nur die Tabellen anzeigen, die Sie besitzen:
SELECT table_name FROM user_tables;
Denken Sie daran, dass einige "Tabellen" tatsächlich "Ansichten" sind, so dass Sie auch versuchen können, Folgendes auszuführen:
SELECT view_name FROM all_views;
Dies sollte etwas ergeben, das ziemlich akzeptabel aussieht wie:
Einfache Abfrage zum Auswählen der Tabellen für den aktuellen Benutzer:
SELECT table_name FROM user_tables;
select object_name from user_objects where object_type='TABLE';
----------------ODER------------------
select * from tab;
----------------ODER------------------
select table_name from user_tables;
Probieren Sie die folgenden Datenwörterbuchansichten aus.
tabs
dba_tables
all_tables
user_tables
Wählen Sie aus Benutzer_Tabellen Hier werden die Tabellen aufgelistet, die dem aktuellen Benutzer gehören.