Comment répertorier toutes les tables d'un schéma dans Oracle SQL?
Comment répertorier toutes les tables d'un schéma dans Oracle SQL?
Réponses:
Pour voir toutes les tables d'un autre schéma, vous devez disposer d'un ou plusieurs des privilèges système suivants:
SELECT ANY DICTIONARY
(SELECT | INSERT | UPDATE | DELETE) ANY TABLE
ou le gros marteau, le rôle du DBA.
Avec l'un de ceux-ci, vous pouvez sélectionner:
SELECT DISTINCT OWNER, OBJECT_NAME
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
Sans ces privilèges système, vous ne pouvez voir que les tables auxquelles vous avez obtenu un certain niveau d'accès, que ce soit directement ou via un rôle.
SELECT DISTINCT OWNER, OBJECT_NAME
FROM ALL_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
Enfin, vous pouvez toujours interroger le dictionnaire de données pour vos propres tables, car vos droits sur vos tables ne peuvent pas être révoqués (à partir de 10g):
SELECT DISTINCT OBJECT_NAME
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
DISTINCT
dans la requête. owner, object_name
est unique dansALL_OBJECTS
owner, object_name
n'est en aucun cas unique dans dba_objects; Les corps de package et les packages apparaissent tous les deux dans cette vue, et les tables et les index sont dans des espaces de noms différents.
SELECT table_name from all_tables where owner = 'YOURSCHEMA';
Vous pouvez interroger USER_TABLES
select TABLE_NAME from user_tables
Essayez ceci, remplacez? avec le nom de votre schéma
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =?
AND TABLE_TYPE = 'BASE TABLE'
Si vous accédez à Oracle avec JDBC (Java), vous pouvez utiliser la classe DatabaseMetadata . Si vous accédez à Oracle avec ADO.NET, vous pouvez utiliser une approche similaire.
Si vous accédez à Oracle avec ODBC, vous pouvez utiliser la fonction SQLTables .
Sinon, si vous avez juste besoin des informations dans SQLPlus ou un client Oracle similaire, l'une des requêtes déjà mentionnées fera l'affaire. Par exemple:
select TABLE_NAME from user_tables
select * from cat;
il affichera toutes les tables de votre schéma cat synonyme de user_catalog
Vous pouvez exécuter directement la deuxième requête si vous connaissez le nom du propriétaire.
- Vous pouvez d'abord sélectionner ce que tous les PROPRIÉTAIRES existent:
SELECT DISTINCT(owner) from SYS.ALL_TABLES;
- Ensuite, vous pouvez voir les tableaux ci-dessous par ce propriétaire:
SELECT table_name, owner from all_tables where owner like ('%XYZ%');
Regardez mon utilitaire simple pour afficher des informations sur le schéma de base de données. Il est basé sur: l' ingénierie inverse d'un modèle de données à l'aide du dictionnaire de données Oracle
Si vous avez également besoin d'obtenir la taille de la table, ce sera pratique:
select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1
Nom de la table et du compteur de lignes pour toutes les tables sous OWNER
schéma:
SELECT table_name, num_rows counter from DBA_TABLES WHERE owner = 'OWNER'
%_OBJECTS
au lieu de%_TABLES
.