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?
Antworten:
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 aber benötigen, können Sie anfordern, dass der DBA Ihnen explizit Berechtigungen für diese Tabelle gewährt, oder dass der DBA Ihnen die SELECT ANY DICTIONARY
Berechtigungen oder die SELECT_CATALOG_ROLE
Rolle gewährt (beide ermöglichen es Ihnen, eine beliebige Datenwörterbuchtabelle abzufragen ). Natürlich möchten Sie möglicherweise bestimmte Schemas wie SYS
und SYSTEM
mit einer großen Anzahl von Oracle-Tabellen ausschließen, die Sie wahrscheinlich nicht interessieren.
Wenn Sie keinen Zugriff haben DBA_TABLES
, können Sie alternativ alle Tabellen ALL_TABLES
anzeigen , auf die Ihr Konto über die Ansicht Zugriff hat :
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, auf die Ihr Benutzer Zugriff hat).
Wenn Sie sich nur mit den Tabellen befassen, die Sie besitzen, und nicht mit denen, auf die Sie Zugriff haben, können Sie Folgendes verwenden USER_TABLES
:
SELECT table_name
FROM user_tables
Da USER_TABLES
nur Informationen zu den Tabellen vorhanden sind, die Sie besitzen, gibt es keine OWNER
Spalte - der Eigentümer sind per Definition Sie.
Oracle hat auch eine Reihe von Altdaten Wörterbuch views-- TAB
, DICT
, TABS
, und CAT
für example-- die verwendet werden könnten. Im Allgemeinen würde ich nicht empfehlen, diese älteren 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, sodass sie häufig Probleme mit neueren Objekttypen haben. Beispielsweise zeigen die Ansichten TAB
und CAT
beide Informationen zu Tabellen an, die sich im Papierkorb des Benutzers befinden, während die [DBA|ALL|USER]_TABLES
Ansichten alle diese herausfiltern. CAT
Außerdem werden Informationen zu materialisierten Ansichtsprotokollen mit TABLE_TYPE
"TABLE" angezeigt, die wahrscheinlich nicht Ihren Wünschen entsprechen. DICT
kombiniert Tabellen und Synonyme und sagt Ihnen nicht, wem das Objekt gehört.
Abfragen user_tables
und dba_tables
nicht funktioniert.
Dieser tat:
select table_name from all_tables
Wenn Sie noch einen Schritt weiter gehen, gibt es eine andere Ansicht namens cols (all_tab_columns), mit der Sie feststellen können, 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, deren Name mit EST beginnt, und Spalten, die CALLREF an einer beliebigen Stelle in ihren Namen enthalten.
Dies kann hilfreich sein, wenn Sie herausfinden möchten, an welchen Spalten Sie teilnehmen möchten, z. B. abhängig von Ihren Namenskonventionen für Tabellen und Spalten.
select * from cols
0 Zeilen zurückgegeben.
sqlplus
Wenn Sie verwenden sqlplus
, möchten Sie möglicherweise zuerst einige Parameter für eine bessere Anzeige einrichten, wenn Ihre Spalten beschädigt werden (diese Variablen sollten nach dem Beenden Ihrer sqlplus
Sitzung nicht bestehen bleiben ):
set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000
Sie können dann so etwas verwenden, um alle Tabellennamen anzuzeigen:
SELECT table_name, owner, tablespace_name FROM all_tables;
Wie @Justin Cave erwähnt, können Sie damit nur Tabellen anzeigen, die Sie besitzen:
SELECT table_name FROM user_tables;
Beachten Sie, dass einige "Tabellen" tatsächlich "Ansichten" sein können, sodass Sie auch versuchen können, Folgendes auszuführen:
SELECT view_name FROM all_views;
Dies sollte etwas ergeben, das ziemlich akzeptabel aussieht wie:
pagesize 30
mit pagesize 1000
?
Einfache Abfrage zum Auswählen der Tabellen für den aktuellen Benutzer:
SELECT table_name FROM user_tables;
Probieren Sie die folgenden Datenwörterbuchansichten aus.
tabs
dba_tables
all_tables
user_tables
Versuchen Sie, aus user_tables auszuwählen, in denen die Tabellen aufgelistet sind, deren Eigentümer der aktuelle Benutzer ist.
Oracle-Datenbank zum Anzeigen der Namen aller Tabellen mithilfe der folgenden Abfrage
SELECT-Eigentümer, Tabellenname FROM dba_tables; SELECT-Eigentümer, Tabellenname FROM all_tables; SELECT Tabellenname FROM Benutzertabellen;
Besuchen Sie mehr: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html
select * from dba_tables
Gibt alle Tabellen aller Benutzer nur an, wenn der Benutzer, mit dem Sie sich angemeldet haben, über die sysdba
Berechtigungen verfügt.
Ich habe keine Antwort gefunden, die darauf hindeuten würde, sie zu verwenden
DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
Also habe ich beschlossen, auch meine Version hinzuzufügen. Diese Ansicht gibt tatsächlich mehr als DBA_TABLES zurück, da sie auch Objekttabellen zurückgibt ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ).
Sie können Oracle Data Dictionary verwenden , um Informationen zu Oracle-Objekten abzurufen.
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 unter Verwendung des Tabellennamens erhalten:
select *
from dba_tab_columns
Dann können Sie eine Liste der Abhängigkeiten (Trigger, Ansichten usw.) erhalten:
select *
from dba_dependencies
where referenced_type='TABLE' and referenced_name=:t_name
Dann können Sie die Textquelle dieser Objekte erhalten:
select * from dba_source
Und Sie können USER
oder ALL
Ansichten anstelle von verwenden, DBA
wenn Sie möchten.
Wir können alle Tabellen einschließlich der Spaltendetails aus der folgenden Abfrage abrufen:
SELECT * FROM user_tab_columns;
Unten finden Sie einen kommentierten Ausschnitt aus SQL-Abfragen, in dem beschrieben wird, wie Sie Optionen verwenden 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;
Eine neue Funktion in SQLcl (einer kostenlosen Befehlszeilenschnittstelle für Oracle Database) ist
Tables
alias.
Hier sind einige Beispiele, die die Verwendung und zusätzliche Aspekte der Funktion zeigen. 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, in denen Daten angezeigt werden.
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 tables
Alias bezieht, können Sie einfach verwendenalias list <alias>
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 unter SQLcl verfügbar ist. Wenn Sie Tabellen aus einem bestimmten Schema auflisten möchten, einen neuen benutzerdefinierten Alias verwenden und den Schemanamen als Bindungsargument übergeben möchten, wobei nur eine Reihe von Spalten angezeigt wird, können Sie dies verwenden
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 komplexerer vordefinierter Alias ist bekannt als Tables2
, der mehrere andere Spalten anzeigt.
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
Ich wollte eine Liste aller Spaltennamen erhalten, 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;
In der Tat ist es möglich, die Liste der Tabellen über SQL-Abfragen abzurufen. Dies ist auch über Tools möglich, mit denen Datenwörterbücher wie ERWIN , Toad Data Modeler oder ERBuilder erstellt werden können . Mit diesen Tools verfügen Sie neben Tabellennamen über Felder, deren Typen und Objekte wie (Trigger, Sequenzen, Domänen, Ansichten ...).
Führen Sie die folgenden Schritte aus, um Ihre Tabellendefinition zu generieren:
Ihre Datenbank wird in der Software als Entity Relationship-Diagramm angezeigt.
select * from all_all_tables
Dieses zusätzliche "Alle" am Anfang gibt zusätzliche 3 Spalten, die sind:
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
SHOW TABLES
(wie in MySQL)?