Wie liste ich alle Tabellen in einem Schema in Oracle SQL auf?
Wie liste ich alle Tabellen in einem Schema in Oracle SQL auf?
Antworten:
Um alle Tabellen in einem anderen Schema anzuzeigen, müssen Sie über eine oder mehrere der folgenden Systemberechtigungen verfügen:
SELECT ANY DICTIONARY
(SELECT | INSERT | UPDATE | DELETE) ANY TABLE
oder der große Hammer, die DBA-Rolle.
Mit einem dieser Optionen können Sie Folgendes auswählen:
SELECT DISTINCT OWNER, OBJECT_NAME
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
Ohne diese Systemberechtigungen können Sie nur Tabellen anzeigen, auf die Sie direkt oder über eine Rolle Zugriff haben.
SELECT DISTINCT OWNER, OBJECT_NAME
FROM ALL_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
Schließlich können Sie das Datenwörterbuch jederzeit nach Ihren eigenen Tabellen abfragen, da Ihre Rechte an Ihren Tabellen nicht widerrufen werden können (ab 10g):
SELECT DISTINCT OBJECT_NAME
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
DISTINCT
in der Abfrage. owner, object_name
ist einzigartig inALL_OBJECTS
owner, object_name
in dba_objects keineswegs eindeutig; In dieser Ansicht werden sowohl Paketkörper als auch Pakete angezeigt, und Tabellen und Indizes befinden sich in unterschiedlichen Namespaces.
SELECT table_name from all_tables where owner = 'YOURSCHEMA';
Sie können abfragen USER_TABLES
select TABLE_NAME from user_tables
Versuchen Sie dies, ersetzen Sie? mit Ihrem Schemanamen
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =?
AND TABLE_TYPE = 'BASE TABLE'
Wenn Sie mit JDBC (Java) auf Oracle zugreifen, können Sie die DatabaseMetadata- Klasse verwenden. Wenn Sie mit ADO.NET auf Oracle zugreifen, können Sie einen ähnlichen Ansatz verwenden.
Wenn Sie mit ODBC auf Oracle zugreifen, können Sie die SQLTables- Funktion verwenden.
Andernfalls reicht eine der bereits erwähnten Abfragen aus, wenn Sie nur die Informationen in SQLPlus oder einem ähnlichen Oracle-Client benötigen. Zum Beispiel:
select TABLE_NAME from user_tables
select * from cat;
Es werden alle Tabellen in Ihrem Schemakatzen-Synonym für user_catalog angezeigt
Sie können die zweite Abfrage direkt ausführen, wenn Sie den Eigentümernamen kennen.
- Zuerst können Sie auswählen, welche EIGENTÜMER es gibt:
SELECT DISTINCT(owner) from SYS.ALL_TABLES;
- Dann können Sie die Tabellen unter diesem Eigentümer sehen:
SELECT table_name, owner from all_tables where owner like ('%XYZ%');
Schauen Sie sich mein einfaches Dienstprogramm an, um einige Informationen zum Datenbankschema anzuzeigen. Es basiert auf: Reverse Engineering eines Datenmodells mit dem Oracle Data Dictionary
Wenn Sie auch die Größe des Tisches benötigen, ist dies praktisch:
select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1
Name des Tabellen- und Zeilenzählers für alle Tabellen im OWNER
Schema:
SELECT table_name, num_rows counter from DBA_TABLES WHERE owner = 'OWNER'
%_OBJECTS
statt%_TABLES
.