¿Cómo puedo consultar una base de datos Oracle para mostrar los nombres de todas las tablas que contiene?
SELECT owner, table_name
FROM dba_tables
Esto supone que tiene acceso a la vista del diccionario de datos DBA_TABLES
. Si no tiene esos privilegios pero los necesita, puede solicitar que el DBA le conceda explícitamente privilegios sobre esa tabla, o bien, que el DBA le conceda el privilegio SELECT ANY DICTIONARY
o el rol SELECT_CATALOG_ROLE
(cualquiera de los cuales le permitiría consultar cualquier tabla del diccionario de datos). Por supuesto, puedes querer excluir ciertos esquemas como SYS
y SYSTEM
que tienen un gran número de tablas de Oracle que probablemente no te interesan.
Alternativamente, si no tienes acceso a DBA_TABLES
, puedes ver todas las tablas a las que tu cuenta tiene acceso a través de la vista ALL_TABLES
:
SELECT owner, table_name
FROM all_tables
Aunque, eso puede ser un subconjunto de las tablas disponibles en la base de datos (ALL_TABLES
le muestra la información de todas las tablas a las que su usuario tiene acceso).
Si sólo le preocupan las tablas que posee, no aquellas a las que tiene acceso, podría utilizar USER_TABLES
:
SELECT table_name
FROM user_tables
Como USER_TABLES
sólo tiene información sobre las tablas de las que eres propietario, no tiene una columna OWNER
- el propietario, por definición, eres tú.
Oracle también tiene un número de vistas de diccionario de datos heredadas - TAB
, DICT
, TABS
, y CAT
por ejemplo - que podrían ser utilizadas. En general, yo no sugeriría usar estas vistas heredadas a menos que sea absolutamente necesario retroceder sus scripts a Oracle 6. Oracle no ha cambiado estas vistas en mucho tiempo por lo que a menudo tienen problemas con los nuevos tipos de objetos. Por ejemplo, las vistas TAB
y CAT
muestran información sobre las tablas que están en la papelera del usuario, mientras que las vistas [DBA|ALL|USER]_TABLES
las filtran. La vista CAT
también muestra información sobre los registros de las vistas materializadas con un TABLE_TYPE
de "TABLE", que probablemente no sea lo que realmente quieres. DICT` combina tablas y sinónimos y no te dice a quién pertenece el objeto.