Frage Liste aller Tabellen in Oracle abrufen?


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


936
2017-10-15 17:54


Ursprung


Antworten:


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_TABLESSie 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.


1189
2017-10-15 17:56



Abfrage user_tables und dba_tables hat nicht funktioniert.
Dieser hat getan:

select table_name from all_tables  

158
2017-10-15 18:12



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.


57
2017-09-04 07:34



Zum besseren Betrachten mit 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

Zeige alle Tabellen

Sie können dann so etwas verwenden, um alle Tabellennamen zu sehen:

SELECT table_name, owner, tablespace_name FROM all_tables;

Zeige eigene Tische

Wie @Justin Cave erwähnt, können Sie damit nur die Tabellen anzeigen, die Sie besitzen:

SELECT table_name FROM user_tables;

Vergessen Sie nicht die Ansichten

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;

Die Ergebnisse

Dies sollte etwas ergeben, das ziemlich akzeptabel aussieht wie:

result


39
2017-07-17 16:20



Einfache Abfrage zum Auswählen der Tabellen für den aktuellen Benutzer:

  SELECT table_name FROM user_tables;

19
2017-12-21 16:32



    select object_name from user_objects where object_type='TABLE';

----------------ODER------------------

    select * from tab;

----------------ODER------------------

    select table_name from user_tables;

15
2017-10-08 09:28



Probieren Sie die folgenden Datenwörterbuchansichten aus.

tabs
dba_tables
all_tables
user_tables

14
2018-04-25 17:30



Wählen Sie aus Benutzer_Tabellen Hier werden die Tabellen aufgelistet, die dem aktuellen Benutzer gehören.


8
2017-10-15 18:08