Parfois, vous vous apercevez que ce que vous pensez depuis des années est faux ! Prenons le cas de DBA_TABLES
, ALL_TABLES
et USER_TABLES
. Pensez-vous que ces vues affichent toutes les tables de la bases de données ? Et bien c’est loin d’être le cas, comme le montre le test ci-dessous :
Commençons par un cas qui fonctionne…
create table X(col1 xmltype);
select table_name from user_tables;
TABLE_NAME
----------
X
Et maintenant, le cas qui ne fonctionne pas…
create table Y of xmltype;
select table_name from user_tables;
TABLE_NAME
----------
X
Vous cherchez le Y
? Pourquoi ne s’affiche-t-il pas ? La réponse est dans le détail de la documentation « DBA_TABLES describes all relational tables in the database ». La vue qui liste toutes les tables de la base de données est en réalité DBA_ALL_TABLES
comme le montre le script ci-dessous :
select table_name from user_all_tables;
TABLE_NAME
----------
X
Y
A son sujet, la documentation dit « DBA_ALL_TABLES
describes all object tables and relational tables in the database ». Le saviez-vous ?