web-dev-qa-db-ger.com

Liste aller Tabellen in Oracle abrufen

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

1001
vitule
SELECT owner, table_name
  FROM dba_tables

Dies setzt voraus, dass Sie Zugriff auf die DBA_TABLES-Datenwörterbuchansicht haben. Wenn Sie nicht über diese Berechtigungen verfügen, diese jedoch benötigen, können Sie anfordern, dass der DBA Ihnen explizit Berechtigungen für diese Tabelle erteilt, oder dass der DBA Ihnen das Privileg SELECT ANY DICTIONARY oder die Rolle SELECT_CATALOG_ROLE erteilt (mit denen Sie alle Daten abfragen können Wörterbuch-Tabelle). Natürlich möchten Sie bestimmte Schemas wie SYS und SYSTEM ausschließen, die eine große Anzahl von Oracle-Tabellen haben, die Sie wahrscheinlich nicht interessieren.

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

SELECT owner, table_name
  FROM all_tables

Dies kann jedoch eine Teilmenge der in der Datenbank verfügbaren Tabellen sein (ALL_TABLES zeigt Ihnen die Informationen für alle Tabellen an, auf die Ihr Benutzer Zugriff hat). 

Wenn Sie sich nur mit den Tabellen befassen, die Sie besitzen, und nicht mit den Tabellen, auf die Sie Zugriff haben, können Sie USER_TABLES verwenden:

SELECT table_name
  FROM user_tables

Da USER_TABLES nur Informationen zu den Tabellen enthält, die Sie besitzen, hat es keine OWNER-Spalte - der Eigentümer sind Sie per Definition.

Oracle verfügt auch über eine Reihe von Legacy-Data-Dictionary-Ansichten, beispielsweise TAB, DICT, TABS und CAT, die verwendet werden könnten. Im Allgemeinen würde ich nicht empfehlen, diese alten Ansichten zu verwenden, es sei denn, Sie müssen Ihre Skripts unbedingt zu Oracle 6 zurückportieren. Oracle hat diese Ansichten lange Zeit nicht geändert, sodass sie häufig Probleme mit neueren Objekttypen haben. Zum Beispiel zeigen die Ansichten TAB und CAT Informationen zu Tabellen an, die sich im Papierkorb des Benutzers befinden, während die Ansichten [DBA|ALL|USER]_TABLES alle diese herausfiltern. CAT zeigt auch Informationen zu protokollierten Ansichtsprotokollen mit einem TABLE_TYPE von "TABLE" an, der wahrscheinlich nicht das ist, was Sie wirklich wollen. DICT kombiniert Tabellen und Synonyme und sagt Ihnen nicht, wer das Objekt besitzt.

1271
Justin Cave

Das Abfragen von user_tables und dba_tables hat nicht funktioniert.
Dies tat: 

select table_name from all_tables  
169
vitule

Einen Schritt weiter geht es mit einer anderen Ansicht namens cols (all_tab_columns), mit deren Hilfe festgestellt werden kann, 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, die einen Namen haben, der mit EST beginnt, und Spalten, die CALLREF an einer beliebigen Stelle in ihren Namen enthalten.

Dies kann hilfreich sein, wenn Sie herausfinden möchten, mit welchen Spalten Sie verbunden werden möchten, z. B. abhängig von den Tabellen- und Spaltenbenennungskonventionen.

62
stealth_angoid

Für eine bessere Anzeige mit sqlplus

Wenn Sie sqlplus verwenden, sollten Sie zunächst einige Parameter für eine bessere Anzeige einrichten, wenn Ihre Spalten verstümmelt werden (diese Variablen sollten nach Beenden der sqlplus-Sitzung nicht bestehen):

set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000

Alle Tabellen anzeigen

Sie können dann etwas wie folgt verwenden, um alle Tabellennamen anzuzeigen:

SELECT table_name, owner, tablespace_name FROM all_tables;

Tabellen anzeigen, die Sie besitzen

Wie @Justin Cave erwähnt, können Sie hier nur Tabellen anzeigen, die Ihnen gehören:

SELECT table_name FROM user_tables;

Vergessen Sie nicht die Ansichten

Denken Sie daran, dass einige "Tabellen" tatsächlich "Ansichten" sein können, sodass Sie auch versuchen können, etwas auszuführen:

SELECT view_name FROM all_views;

Die Ergebnisse

Dies sollte zu etwas führen, das ziemlich akzeptabel aussieht:

result

46
cwd

Einfache Abfrage zur Auswahl der Tabellen für den aktuellen Benutzer:

  SELECT table_name FROM user_tables;
21
    select object_name from user_objects where object_type='TABLE';

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

    select * from tab;

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

    select table_name from user_tables;
17
Harshil

Probieren Sie die folgenden Datenwörterbuch-Ansichten aus.

tabs
dba_tables
all_tables
user_tables

Hierfür gibt es 3 Datenadministratoren 

DBA_TABLES beschreibt alle relationalen Tabellen in der Datenbank.

SELECT owner, table_name
  FROM dba_tables

Beschreibung der relationalen Tabellen, auf die der Benutzer zugreifen kann

SELECT owner, table_name
  FROM all_tables

USER_TABLES beschreibt die relationalen Tabellen, die dem aktuellen Benutzer gehören. Diese Ansicht zeigt nicht die SpalteOWNERan.

SELECT table_name
  FROM user_tables
9
Kamil Ibadov

Versuchen Sie, aus user_tables auszuwählen, das die Tabellen aufführt, die dem aktuellen Benutzer gehören.

8
Eddie Awad

Mit jeder dieser Optionen können Sie auswählen:

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM DBA_OBJECTS 
    WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM ALL_OBJECTS 
    WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';
6
Van Gogh
select * from dba_tables

gibt alle Tabellen aller Benutzer nur dann aus, wenn der Benutzer, mit dem Sie sich angemeldet haben, die Berechtigungen sysdba besitzt.

5
praveen2609

Oracle-Datenbank, um die Namen aller Tabellen mit der folgenden Abfrage anzuzeigen

 SELECT Besitzer, Tabellenname FROM dba_tables; 

 SELECT Eigentümer, Tabellenname FROM all_tables; 

 SELECT Tabellenname FROM Benutzertabellen;

vist mehr: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-Oracle.html

5
Brahmareddy K

Wir können alle Tabellen einschließlich Spaltendetails aus der folgenden Abfrage erhalten:

SELECT * FROM user_tab_columns;
3
aim_thebest

Ansichten einschließlich:

SELECT owner, table_name as table_view
  FROM dba_tables
UNION ALL
SELECT owner, view_name as table_view
  FROM DBA_VIEWS
3
Punnerud

Sie können Oracle Data Dictionary verwenden, um Informationen zu Oracle-Objekten zu erhalten.

Sie können eine Liste von Tabellen auf verschiedene Arten erhalten:

select * 
from dba_tables

oder zum Beispiel:

select * 
from dba_objects 
where object_type = 'TABLE' 

Dann können Sie Tabellenspalten mit dem Tabellennamen abrufen:

select * 
from dba_tab_columns

Dann können Sie eine Liste von Abhängigkeiten (Auslöser, Ansichten usw.) erhalten:

select * 
from dba_dependencies
where referenced_type='TABLE' and referenced_name=:t_name 

Dann können Sie eine Textquelle für diese Objekte erhalten:

select * from dba_source

Sie können USER oder ALL Ansichten anstelle von DBA verwenden, wenn Sie möchten.

3
Slava Babin

Nachfolgend finden Sie ein kommentiertes Snippet von SQL-Abfragen, in dem beschrieben wird, wie Optionen verwendet werden können:

-- need to have select catalog role
SELECT * FROM dba_tables;

-- to see tables of your schema
SELECT * FROM user_tables;

-- tables inside your schema and tables of other schema which you possess select grants on
SELECT * FROM all_tables;
3
Prashant Mishra

Ich habe keine Antwort gefunden, die darauf schließen lassen würde 

DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)

also entschied ich mich, meine Version hinzuzufügen. Diese Ansicht gibt tatsächlich mehr als DBA_TABLES zurück, da auch Objekttabellen zurückgegeben werden ( http://docs.Oracle.com/cd/E11882_01/server.112/e40402/statviews_1003 .htm ).

3
Rusty

Eine neue Funktion, die in SQLcl (eine kostenlose Befehlszeilenschnittstelle für Oracle Database) verfügbar ist, ist

Tablesalias.

Im Folgenden finden Sie einige Beispiele zur Verwendung und zu weiteren Aspekten der Funktion. 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, die Daten anzeigen.

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 Alias ​​tables bezieht, können Sie einfach alias list <alias> verwenden.

SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------

 select table_name "TABLES" from user_tables

Sie müssen diesen Alias ​​nicht definieren, da er standardmäßig in SQLcl enthalten ist. Wenn Sie Tabellen aus einem bestimmten Schema auflisten möchten, indem Sie einen neuen benutzerdefinierten Aliasnamen verwenden und den Schemanamen als Bindungsargument übergeben, wobei nur eine Reihe von Spalten angezeigt wird, können Sie dies mithilfe von tun

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

OWNER   TABLE_NAME               LAST_ANALYZED
HR      DUMMY1                   18-10-18
HR      YOURTAB2                 16-11-18
HR      YOURTABLE                01-12-18
HR      ID_TABLE                 05-12-18
HR      REGIONS                  26-05-18
HR      LOCATIONS                26-05-18
HR      DEPARTMENTS              26-05-18
HR      JOBS                     26-05-18
HR      EMPLOYEES                12-10-18
..
..

Ein ausgefeilterer vordefinierter Alias ​​heißtTables2und zeigt mehrere andere Spalten an.

SQL> tables2

Tables
======
TABLE_NAME                 NUM_ROWS   BLOCKS   UNFORMATTED_SIZE COMPRESSION     INDEX_COUNT   CONSTRAINT_COUNT   PART_COUNT LAST_ANALYZED
AN_IP_TABLE                       0        0                  0 Disabled                  0                  0            0 > Month
PARTTABLE                         0        0                  0                           1                  0            1 > Month
TST2                              0        0                  0 Disabled                  0                  0            0 > Month
TST3                              0        0                  0 Disabled                  0                  0            0 > Month
MANAGE_EMPLYEE                    0        0                  0 Disabled                  0                  0            0 > Month
PRODUCT                           0        0                  0 Disabled                  0                  0            0 > Month
ALL_TAB_X78EHRYFK                 0        0                  0 Disabled                  0                  0            0 > Month
TBW                               0        0                  0 Disabled                  0                  0            0 > Month
DEPT                              0        0                  0 Disabled                  0                  0            0 > Month

Geben Sie ein, um zu erfahren, welche Abfrage im Hintergrund ausgeführt wird

alias list tables2

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

2
Kaushik Nayak

In der Tat ist es möglich, die Liste der Tabellen über SQL-Abfragen zu erhalten. Dies ist auch über Tools möglich, die die Generierung von Datenwörterbüchern ermöglichen, wie ERWIN , Toad Data Modeler oder ERBuilder . Mit diesen Werkzeugen haben Sie neben Tabellennamen auch Felder, deren Typen, Objekte wie (Trigger, Sequenzen, Domain, Views ...)

Führen Sie die folgenden Schritte aus, um Ihre Tabellendefinition zu generieren:

  1. Sie müssen Ihre Datenbank zurückentwickeln
    • Im Toad Data Modeler: Menü -> Datei -> Reverse Engineering -> Reverse Engineering-Assistent
    • Im ERBuilder Data Modeler: Menü -> Datei -> Reverse Engineering

Ihre Datenbank wird in der Software als Entity Relationship-Diagramm angezeigt.

  1. Generieren Sie Ihr Datenwörterbuch, das Ihre Tabellendefinition enthält
    • Im Toad Data Modeler: Menü -> Modell -> Bericht erstellen -> Ausführen
    • Im ERBuilder Data Modeler: Menü -> Werkzeug -> Modelldokumentation erstellen
1
parash

Ich suchte nach einer Liste aller Spaltennamen, die zu einer Tabelle eines Schemas gehören, sortiert nach der Reihenfolge der Spalten-ID.

Hier ist die Abfrage, die ich verwende: -

SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;
0
Rakesh Narang

Die folgende Abfrage listet nur die erforderlichen Daten auf, während die anderen Antworten mir die zusätzlichen Daten lieferten, die mich nur verwirrten.

select table_name from user_tables;
0
Mateen