Comment interroger une base de données Oracle pour afficher les noms de toutes les tables qu'elle contient ?
SELECT owner, table_name
FROM dba_tables
Ceci suppose que vous ayez accès à la vue du dictionnaire de données DBA_TABLES
. Si vous n'avez pas ces privilèges mais que vous en avez besoin, vous pouvez demander au DBA de vous accorder explicitement des privilèges sur cette table, ou, que le DBA vous accorde le privilège SELECT ANY DICTIONARY
ou le rôle SELECT_CATALOG_ROLE
(l'un ou l'autre vous permettant d'interroger n'importe quelle table du 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 grâce à la vue ALL_TABLES
:
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 ne vous intéressez qu'aux tables que vous possédez, et non à celles auxquelles vous avez accès, vous pouvez utiliser USER_TABLES
:
SELECT table_name
FROM user_tables
Puisque USER_TABLES
ne contient que des informations sur les tables que vous possédez, il n'y a pas de colonne OWNER
- le propriétaire, par définition, c'est vous.
Oracle a également un certain nombre de vues de dictionnaire de données - TAB
, DICT
, TABS
, et CAT
par exemple - qui pourraient être utilisées. En général, je ne suggérerais pas d'utiliser ces anciennes vues à moins que vous n'ayez absolument besoin de rétroporter vos scripts vers Oracle 6. Oracle n'a pas modifié ces vues depuis longtemps et elles ont souvent des problèmes avec les nouveaux types d'objets. Par exemple, les vues TAB
et CAT
montrent toutes deux des informations sur les tables qui sont dans la corbeille de l'utilisateur alors que les vues [DBA|ALL|USER]_TABLES
les filtrent toutes. CAT
affiche également des informations sur les journaux de vues matérialisées avec un TABLE_TYPE
de "TABLE", ce qui n'est probablement pas ce que vous voulez vraiment. DICT
combine les tables et les synonymes et ne vous dit pas qui possède l'objet.
Essayez de faire une sélection à partir de user_tables qui liste les tables appartenant à l'utilisateur actuel.