Question Obtenir la liste de toutes les tables dans Oracle?


Comment puis-je interroger une base de données Oracle pour afficher les noms de toutes les tables dans celle-ci?


936
2017-10-15 17:54


origine


Réponses:


SELECT owner, table_name
  FROM dba_tables

Ceci suppose que vous avez accès à DBA_TABLES vue du dictionnaire de données. Si vous ne disposez pas de ces privilèges mais que vous en avez besoin, vous pouvez demander que l'administrateur de base de données vous accorde explicitement des privilèges sur cette table ou que le DBA vous accorde SELECT ANY DICTIONARY privilège ou le SELECT_CATALOG_ROLE rôle (qui vous permettrait d'interroger n'importe quelle table de dictionnaire de données). Bien sûr, vous pouvez vouloir exclure certains schémas comme SYS et SYSTEM qui ont un grand nombre de tables Oracle dont vous ne vous souciez probablement pas.

Alternativement, si vous n'avez pas accès à DBA_TABLES, vous pouvez voir toutes les tables auxquelles votre compte a accès via ALL_TABLES vue:

SELECT owner, table_name
  FROM all_tables

Bien que cela puisse être un sous-ensemble des tables disponibles dans la base de données (ALL_TABLES vous montre les informations pour toutes les tables auxquelles votre utilisateur a été autorisé à accéder).

Si vous êtes seulement concerné par les tables que vous possédez, pas celles auxquelles vous avez accès, vous pouvez utiliser USER_TABLES:

SELECT table_name
  FROM user_tables

Depuis USER_TABLES a seulement des informations sur les tables que vous possédez, il n'a pas de OWNER colonne - le propriétaire, par définition, c'est vous.

Oracle a également un certain nombre de vues de dictionnaire de données héritées TAB, DICT, TABS, et CAT par exemple-- qui pourrait être utilisé. En général, je ne suggérerais pas d'utiliser ces vues héritées à moins que vous ayez absolument besoin de rétroporter vos scripts vers Oracle 6. Oracle n'a pas changé ces vues depuis longtemps et a donc souvent des problèmes avec les nouveaux types d'objets. Par exemple, le TAB et CAT vues à la fois afficher des informations sur les tables qui sont dans la corbeille de l'utilisateur tandis que le [DBA|ALL|USER]_TABLES vues tous les filtrer. CAT affiche également des informations sur les journaux de vue matérialisés avec un TABLE_TYPE de "TABLE" qui est peu susceptible d'être ce que vous voulez vraiment. DICT combine des tables et des synonymes et ne vous dit pas à qui appartient l'objet.


1189
2017-10-15 17:56



Interroger user_tables et dba_tables n'a pas fonctionné.
Celui-ci a fait:

select table_name from all_tables  

158
2017-10-15 18:12



En allant un peu plus loin, il existe une autre vue appelée cols (all_tab_columns) qui peut être utilisée pour déterminer quelles tables contiennent un nom de colonne donné.

Par exemple:

SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';

pour trouver toutes les tables ayant un nom commençant par EST et les colonnes contenant CALLREF n'importe où dans leurs noms.

Cela peut être utile lors de l'élaboration des colonnes auxquelles vous souhaitez vous joindre, par exemple, en fonction de vos conventions de dénomination de table et de colonne.


57
2017-09-04 07:34



Pour mieux voir avec sqlplus

Si vous utilisez sqlplus vous voudrez peut-être d'abord configurer quelques paramètres pour une meilleure visualisation si vos colonnes sont endommagées (ces variables ne devraient pas persister après avoir quitté votre sqlplus session ):

set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000

Afficher toutes les tables

Vous pouvez ensuite utiliser quelque chose comme ceci pour voir tous les noms de tables:

SELECT table_name, owner, tablespace_name FROM all_tables;

Afficher les tableaux que vous possédez

Comme le mentionne @Justin Cave, vous pouvez l'utiliser pour afficher uniquement les tables que vous possédez:

SELECT table_name FROM user_tables;

Ne pas oublier les vues

Gardez à l'esprit que certaines "tables" peuvent en fait être des "vues", vous pouvez donc également essayer d'exécuter quelque chose comme:

SELECT view_name FROM all_views;

Les resultats

Cela devrait donner quelque chose qui semble assez acceptable comme:

result


39
2017-07-17 16:20



Requête simple pour sélectionner les tables pour l'utilisateur actuel:

  SELECT table_name FROM user_tables;

19
2017-12-21 16:32



    select object_name from user_objects where object_type='TABLE';

----------------OU------------------

    select * from tab;

----------------OU------------------

    select table_name from user_tables;

15
2017-10-08 09:28



Essayez les vues du dictionnaire de données ci-dessous.

tabs
dba_tables
all_tables
user_tables

14
2018-04-25 17:30



Essayez de choisir parmi user_tables qui répertorie les tables appartenant à l'utilisateur actuel.


8
2017-10-15 18:08



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_SCHEMA_NAME';

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM ALL_OBJECTS 
    WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';

6
2018-03-07 18:11



Il existe 3 datadictinary pour cela

DBA_TABLES décrit toutes les tables relationnelles dans la base de données.

SELECT owner, table_name
  FROM dba_tables

Description des tables relationnelles accessibles à l'utilisateur

SELECT owner, table_name
  FROM all_tables

USER_TABLES décrit les tables relationnelles appartenant à l'utilisateur actuel. Cette vue n'affiche pas le PROPRIÉTAIRE colonne.

SELECT table_name
  FROM user_tables

6
2018-02-16 07:01