Pregunta Obtener una lista de todas las tablas en Oracle?


¿Cómo consulto una base de datos Oracle para mostrar los nombres de todas las tablas en ella?


936
2017-10-15 17:54


origen


Respuestas:


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, TABSy 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.


1189
2017-10-15 17:56



Consultando user_tables y dba_tables no funcionó
Este lo hizo:

select table_name from all_tables  

158
2017-10-15 18:12



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.


57
2017-09-04 07:34



Para una mejor visualización con 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

Mostrar todas las tablas

A continuación, puede utilizar algo como esto para ver todos los nombres de tabla:

SELECT table_name, owner, tablespace_name FROM all_tables;

Mostrar tablas propias

Como menciona @Justin Cave, puede usar esto para mostrar solo las tablas que posee:

SELECT table_name FROM user_tables;

No te olvides de las vistas

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;

Los resultados

Esto debería producir algo que se vea bastante aceptable como:

result


39
2017-07-17 16:20



Consulta simple para seleccionar las tablas para el usuario actual:

  SELECT table_name FROM user_tables;

19
2017-12-21 16:32



    select object_name from user_objects where object_type='TABLE';

----------------O------------------

    select * from tab;

----------------O------------------

    select table_name from user_tables;

15
2017-10-08 09:28



Pruebe las vistas del diccionario de datos a continuación.

tabs
dba_tables
all_tables
user_tables

14
2018-04-25 17:30



Intente seleccionar desde user_tables que enumera las tablas propiedad del usuario actual.


8
2017-10-15 18:08



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

6
2018-03-07 18:11



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

6
2018-02-16 07:01



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.


5
2017-08-14 06:28