Comment lister toutes les tables d'un schéma dans Oracle SQL ?
La "réponse la plus complète" en dehors de son utilisation de %_OBJECTS
au lieu de %_TABLES
.
Comment lister toutes les tables d'un schéma dans Oracle SQL ?
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 de DBA.
Avec n'importe lequel d'entre eux, vous pouvez choisir :
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 pour lesquelles vous avez obtenu un certain niveau d'accès, que ce soit directement ou par le biais d'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 être révoqués (à partir de 10g) :
SELECT DISTINCT OBJECT_NAME
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
La "réponse la plus complète" en dehors de son utilisation de %_OBJECTS
au lieu de %_TABLES
.
Je me souviens qu'en 9i, les vues étaient répertoriées dans %_TABLES -- ainsi, par exemple, essayer d'automatiser le vidage d'un schéma se terminait par des instructions comme DROP TABLE REALLY_A_VIEW CASCADE CONSTRAINTS qui provoquaient des erreurs. Il faudrait donc soit supprimer les vues avec MINUS / NOT IN / NOT EXISTS, soit aller à l'encontre de %_OBJECTS. De plus, aller à l'encontre de %_OBJECTS laisse un indice alléchant de ce qu'il pourrait y avoir d'autre là-dedans !
Il n'y a absolument aucun besoin pour le DISTINCT
dans la requête. owner, object_name
est unique dans ALL_OBJECTS
Il s'agit de toutes les tables de VOTRE schéma, et non de toutes les tables de A schéma. En outre, les vues du dictionnaire de données *_TABLES (DBA_TABLES, ALL_TABLES, USER_TABLES) incluent des vues.
Si vous accédez à Oracle avec JDBC (Java), vous pouvez utiliser Base de donnéesMétadonnées la classe. Si vous accédez à Oracle avec ADO.NET, vous pouvez utiliser une approche similaire.
Si vous accédez à Oracle avec ODBC, vous pouvez utiliser SQLTables fonction.
Sinon, si vous avez juste besoin de l'information dans SQLPlus ou un client Oracle similaire, une des requêtes déjà mentionnées fera l'affaire. Par exemple :
select TABLE_NAME from user_tables
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.