177 votes

Comment lister toutes les tables d'un schéma dans Oracle SQL ?

Comment lister toutes les tables d'un schéma dans Oracle SQL ?

244voto

Adam Musch Points 8021

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'

2 votes

La "réponse la plus complète" en dehors de son utilisation de %_OBJECTS au lieu de %_TABLES .

0 votes

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 !

1 votes

Il n'y a absolument aucun besoin pour le DISTINCT dans la requête. owner, object_name est unique dans ALL_OBJECTS

76voto

Tom Points 16783
SELECT table_name  from all_tables where owner = 'YOURSCHEMA';

2 votes

Cela ne montrera que todo les tables de YOURSCHEMA si elles sont exécutées par YOURSCHEMA ou par un utilisateur ayant les privilèges mentionnés par Adam Musch. Sinon, il affiche uniquement les tables de YOURSCHEMA pour lesquelles des privilèges nous ont été accordés.

15voto

Sathya Points 9277

Vous pouvez interroger USER_TABLES

select TABLE_NAME from user_tables

5 votes

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.

0 votes

Remplacer "inclure des vues" par "peut inclure des vues dans les seme versions d'Oracle".

0 votes

@Adam Musch Testé en utilisant Oracle 10g R2, il n'a pas retourné de vues.

4voto

chan Points 11

Si vous vous êtes connecté en tant qu'utilisateur normal sans autorisation du DBA, vous pouvez utiliser la commande suivante pour voir toutes les tables et vues de votre propre schéma.

select * from tab;

2voto

Pablo Santa Cruz Points 73944

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.com

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.

Powered by:

X