¿Cómo consulto una base de datos Oracle para mostrar los nombres de todas las tablas en ella?
¿Cómo consulto una base de datos Oracle para mostrar los nombres de todas las tablas en ella?
SELECT owner, table_name
FROM dba_tables
Esto es asumiendo que tienes acceso a la DBA_TABLES
vista del diccionario de datos. Si no tiene esos privilegios pero los necesita, puede solicitar que el DBA le conceda explícitamente privilegios en esa tabla, o que el DBA le otorgue el privilegio SELECT ANY DICTIONARY
privilegio o el SELECT_CATALOG_ROLE
rol (cualquiera de los cuales le permitiría consultar cualquier tabla de diccionario de datos). Por supuesto, es posible que desee excluir ciertos esquemas como SYS
y SYSTEM
que tienen un gran número de tablas de Oracle que probablemente no le importen.
Alternativamente, si no tienes acceso a DBA_TABLES
, puede ver todas las tablas a las que su cuenta tiene acceso a través del ALL_TABLES
ver:
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 se le ha otorgado acceso a su usuario).
Si solo le interesan las tablas que posee, no aquellas a las que tiene acceso, podría usar USER_TABLES
:
SELECT table_name
FROM user_tables
Ya que USER_TABLES
solo tiene información sobre las tablas que posee, no tiene una OWNER
Columna: el propietario, por definición, eres tú.
Oracle también tiene una serie de vistas heredadas del diccionario de datos-- TAB
, DICT
, TABS
y CAT
por ejemplo-- que podría ser usado. En general, no recomendaría utilizar estas vistas heredadas a menos que sea absolutamente necesario realizar copias de seguridad de sus scripts a Oracle 6. Oracle no ha cambiado estas vistas en mucho tiempo, por lo que a menudo tienen problemas con tipos de objetos más nuevos. Por ejemplo, el TAB
y CAT
vistas muestran información sobre tablas que están en la papelera de reciclaje del usuario mientras [DBA|ALL|USER]_TABLES
todas las vistas las filtran. CAT
también muestra información sobre los registros de vista materializados con un TABLE_TYPE
de "TABLE", que es poco probable que sea lo que realmente quieres. DICT
combina tablas y sinónimos y no le dice a quién pertenece el objeto.
Consultando user_tables
y dba_tables
no funcionó
Este lo hizo:
select table_name from all_tables
Yendo un paso más allá, hay otra vista llamada cols (all_tab_columns) que se puede usar para determinar qué tablas contienen un nombre de columna dado.
Por ejemplo:
SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';
para encontrar todas las tablas que tengan un nombre que comience con EST y columnas que contengan CALLREF en cualquier lugar de sus nombres.
Esto puede ayudar a determinar en qué columnas desea unirse, por ejemplo, según las convenciones de nomenclatura de tabla y columna.
sqlplus
Si estás usando sqlplus
Es posible que desee configurar primero algunos parámetros para una mejor visualización si sus columnas se están mutilando (estas variables no deberían persistir después de salir de su sqlplus
sesión)
set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000
A continuación, puede utilizar algo como esto para ver todos los nombres de tabla:
SELECT table_name, owner, tablespace_name FROM all_tables;
Como menciona @Justin Cave, puede usar esto para mostrar solo las tablas que posee:
SELECT table_name FROM user_tables;
Tenga en cuenta que algunas "tablas" pueden ser realmente "vistas", así que también puede intentar ejecutar algo como:
SELECT view_name FROM all_views;
Esto debería producir algo que se vea bastante aceptable como:
Consulta simple para seleccionar las tablas para el usuario actual:
SELECT table_name FROM user_tables;
select object_name from user_objects where object_type='TABLE';
----------------O------------------
select * from tab;
----------------O------------------
select table_name from user_tables;
Pruebe las vistas del diccionario de datos a continuación.
tabs
dba_tables
all_tables
user_tables
Intente seleccionar desde user_tables que enumera las tablas propiedad del usuario actual.
Con cualquiera de ellos, puede seleccionar:
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';
Existen 3 datosdictinarios para este
DBA_TABLES describe todas las tablas relacionales en la base de datos.
SELECT owner, table_name
FROM dba_tables
Descripción de tablas relacionales accesibles para el usuario
SELECT owner, table_name
FROM all_tables
USER_TABLES describe las tablas relacionales propiedad del usuario actual. Esta vista no muestra el PROPIETARIO columna.
SELECT table_name
FROM user_tables
select * from dba_tables
da todas las tablas de todos los usuarios solo si el usuario con el que inició sesión tiene el sysdba
privilegios.