Wie frage ich eine Oracle-Datenbank ab, um die Namen aller Tabellen anzuzeigen?
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.
Das Abfragen von user_tables
und dba_tables
hat nicht funktioniert.
Dies tat:
select table_name from all_tables
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.
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
Sie können dann etwas wie folgt verwenden, um alle Tabellennamen anzuzeigen:
SELECT table_name, owner, tablespace_name FROM all_tables;
Wie @Justin Cave erwähnt, können Sie hier nur Tabellen anzeigen, die Ihnen gehören:
SELECT table_name FROM user_tables;
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;
Dies sollte zu etwas führen, das ziemlich akzeptabel aussieht:
Einfache Abfrage zur Auswahl 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ö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
Versuchen Sie, aus user_tables auszuwählen, das die Tabellen aufführt, die dem aktuellen Benutzer gehören.
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';
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.
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
Wir können alle Tabellen einschließlich Spaltendetails aus der folgenden Abfrage erhalten:
SELECT * FROM user_tab_columns;
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
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.
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;
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 ).
Eine neue Funktion, die in SQLcl (eine kostenlose Befehlszeilenschnittstelle für Oracle Database) verfügbar ist, ist
Tables
alias.
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ßtTables2
und 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
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:
Ihre Datenbank wird in der Software als Entity Relationship-Diagramm angezeigt.
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;
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;