¿Obtener la lista de todas las tablas en Oracle?

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

preguntado Oct 15 '08, 15:10

¿Afecta la regulación de la SHOW TABLES (como se hace en MySQL) funciona? -

@MartinThoma no. probé eso primero, antes de recurrir a Google -

24 Respuestas

SELECT owner, table_name
  FROM dba_tables

Esto es asumiendo que tiene acceso a la DBA_TABLES vista de diccionario de datos. Si no tiene esos privilegios pero los necesita, puede solicitar que el DBA le otorgue explícitamente privilegios en esa mesa, o que el DBA le otorgue el 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 una gran cantidad de tablas de Oracle que probablemente no le interesan.

Alternativamente, si no tiene acceso a DBA_TABLES, puede ver todas las tablas a las que tiene acceso su cuenta a través del ALL_TABLES ver:

SELECT owner, table_name
  FROM all_tables

Aunque, puede ser un subconjunto de las tablas disponibles en la base de datos (ALL_TABLES muestra la información de todas las tablas a las que su usuario tiene acceso).

Si solo le preocupan las tablas que posee, no aquellas a las que tiene acceso, puede usar USER_TABLES:

SELECT table_name
  FROM user_tables

Como USER_TABLES solo tiene información sobre las tablas que posee, no tiene un OWNER columna: el propietario, por definición, es usted.

Oracle también tiene varias vistas de diccionarios de datos heredados: TAB, DICT, TABS y CAT por ejemplo, que podría usarse. En general, no sugeriría usar estas vistas heredadas a menos que sea absolutamente necesario que transfiera sus scripts a Oracle 6. Oracle no ha cambiado estas vistas en mucho tiempo, por lo que a menudo tienen problemas con los tipos de objetos más nuevos. Por ejemplo, el TAB y CAT Ambas vistas muestran información sobre las tablas que se encuentran en la papelera de reciclaje del usuario mientras [DBA|ALL|USER]_TABLES vistas todas filtrarlas. CAT también muestra información sobre registros de vista materializados con un TABLE_TYPE de "TABLE", que es poco probable que sea lo que realmente desea. DICT combina tablas y sinónimos y no le dice quién es el propietario del objeto.

Respondido 19 Oct 17, 13:10

Recibo una excepción "ORA-00942: la tabla o la vista no existe" - vitule

Entonces no se le ha dado permiso para ver todas las tablas en la base de datos. Puede consultar la vista del diccionario de datos ALL_TABLES para ver todas las tablas a las que puede acceder, que pueden ser un pequeño subconjunto de las tablas de la base de datos. - Justin cueva

Error simple si no es un usuario diario de sqlplus: agregue el punto y coma final (';') si simplemente no obtiene resultados con los comandos anteriores :). - gimhani

Solo tenga en cuenta que a partir de Oracle 12c, hay una columna en el diccionario de datos dba_users para ayudar a eliminar las tablas del sistema de su conjunto de resultados. La consulta completa sería SELECT owner, table_name de dba_tables donde el propietario no está (seleccione el nombre de usuario de dba_users donde oracle_maintained = 'Y') - saritonina

Como se indicó, debe tener un mínimo de permisos SELECT en una tabla para verlo, y eso también es solo si su cuenta tiene acceso a él a través de un sinónimo PÚBLICO o PRIVADO. ¡ORA-00942 es posiblemente el error más común que encontrará! - Allen

Consulta user_tables y dba_tables no funcionó
Este hizo:

select table_name from all_tables  

Respondido 15 Oct 08, 19:10

@LimitedAtonement Lo siento, eso está mal. La vista se llama user_tables, no user_table. Si user_tables no funcionó para vitule, algo más estaba mal. - franco schmitt

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 determinado.

Por ejemplo:

SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';

para buscar 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 a qué columnas desea unirse, por ejemplo, según las convenciones de nomenclatura de su tabla y columna.

Respondido el 11 de diciembre de 10 a las 05:12

yo si select * from cols y obtuve 0 filas devueltas. - Gabe

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 alteran (estas variables no deben 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

Luego puede usar algo como esto para ver todos los nombres de las tablas:

SELECT table_name, owner, tablespace_name FROM all_tables;

Muestre las tablas que posee

Como menciona @Justin Cave, puede usar esto para mostrar solo las tablas de su propiedad:

SELECT table_name FROM user_tables;

No te olvides de las vistas

Tenga en cuenta que algunas "tablas" en realidad pueden ser "vistas", por lo que también puede intentar ejecutar algo como:

SELECT view_name FROM all_views;

Los resultados

Esto debería producir algo que parezca bastante aceptable como:

resultado

Respondido 17 Jul 14, 17:07

gracias por el consejo de "mejor visualización", pero ¿no está sobrescribiendo pagesize 30 con pagesize 1000? - pablo recalde

Consulta simple para seleccionar las tablas para el usuario actual:

  SELECT table_name FROM user_tables;

respondido 26 nov., 13:22

    select object_name from user_objects where object_type='TABLE';

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

    select * from tab;

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

    select table_name from user_tables;

Respondido 08 Oct 14, 10:10

Los primeros 2 trabajaron para mí. El último devuelve 'no hay filas seleccionadas'. ¿Me pregunto porque? - Upuli Han

Pruebe las siguientes vistas del diccionario de datos.

tabs
dba_tables
all_tables
user_tables

Respondido el 28 de Septiembre de 13 a las 11:09

Base de datos Oracle para mostrar los nombres de todas las tablas usando la siguiente consulta

SELECCIONAR propietario, table_name FROM dba_tables; SELECCIONAR propietario, table_name FROM all_tables; SELECT nombre_tabla FROM tablas_usuario;

visita más: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html

Respondido el 17 de diciembre de 17 a las 10:12

Intente seleccionar de tablas_usuario que enumera las tablas propiedad del usuario actual.

Respondido 15 Oct 08, 19:10

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

Respondido el 15 de Septiembre de 14 a las 23:09

select * from dba_tables

proporciona todas las tablas de todos los usuarios solo si el usuario con el que inició sesión tiene la sysdba privilegios.

contestado el 29 de mayo de 13 a las 14:05

Eso en realidad no es correcto. No se requiere SYSDBA. Puede acceder a DBA_TABLES de muchas formas. 1.) Concesión directa del objeto al usuario por SYS. 2.) Concesión del privilegio SELECCIONAR CUALQUIER DICCIONARIO al usuario. 3.) Concesión del rol SELECT_CATALOG_ROLE. - Marcos J. Bobak

No encontré una respuesta que apunte a usar

DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)

así que decidí agregar mi versión también. Esta vista en realidad devuelve más que DBA_TABLES, ya que también devuelve tablas de objetos (http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm).

respondido 11 nov., 16:15

Puedes usar Diccionario de datos de Oracle para obtener información sobre los objetos de Oracle.

Puede obtener la lista de tablas de diferentes formas:

select * 
from dba_tables

o por ejemplo:

select * 
from dba_objects 
where object_type = 'TABLE' 

Entonces puede obtener columnas de la tabla usando el nombre de la tabla:

select * 
from dba_tab_columns

Luego puede obtener una lista de dependencias (activadores, vistas, etc.):

select * 
from dba_dependencies
where referenced_type='TABLE' and referenced_name=:t_name 

Entonces puede obtener la fuente de texto de estos objetos:

select * from dba_source

Y puedes usar USER or ALL vistas en lugar de DBA si tu quieres.

Respondido el 15 de Septiembre de 17 a las 13:09

Incluyendo vistas:

SELECT owner, table_name as table_view
  FROM dba_tables
UNION ALL
SELECT owner, view_name as table_view
  FROM DBA_VIEWS

Respondido 25 Oct 17, 12:10

Podemos obtener todas las tablas, incluidos los detalles de las columnas de la siguiente consulta:

SELECT * FROM user_tab_columns;

Respondido el 03 de diciembre de 17 a las 17:12

A continuación se muestra un fragmento comentado de consultas SQL que describen cómo las opciones que puede utilizar:

-- need to have select catalog role
SELECT * FROM dba_tables;

-- to see tables of your schema
SELECT * FROM user_tables;

-- tables inside your schema and tables of other schema which you possess select grants on
SELECT * FROM all_tables;

Respondido el 03 de diciembre de 17 a las 17:12

Una nueva característica disponible en SQLcl(que es una interfaz de línea de comandos gratuita para Oracle Database) es

Tables también conocido como

A continuación, se muestran algunos ejemplos que muestran el uso y aspectos adicionales de la función. Primero, conéctese a un sql línea de comando (sql.exe en Windows) sesión. Se recomienda ingresar este comando específico de sqlcl antes de ejecutar cualquier otro comando o consulta que muestre datos.

SQL> set sqlformat ansiconsole     -- resizes the columns to the width of the 
                                   -- data to save space 

SQL> tables

TABLES
-----------
REGIONS
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
..

Para saber lo que tables alias se refiere, simplemente puede usar alias list <alias>

SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------

 select table_name "TABLES" from user_tables

No tiene que definir este alias, ya que viene de forma predeterminada en SQLcl. Si desea enumerar tablas de un esquema específico, utilizando un nuevo alias definido por el usuario y pasando el nombre del esquema como un argumento de vinculación con solo un conjunto de columnas que se muestran, puede hacerlo usando

SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;

A partir de entonces, simplemente puede pasar el nombre del esquema como argumento

SQL> tables_schema HR

OWNER   TABLE_NAME               LAST_ANALYZED
HR      DUMMY1                   18-10-18
HR      YOURTAB2                 16-11-18
HR      YOURTABLE                01-12-18
HR      ID_TABLE                 05-12-18
HR      REGIONS                  26-05-18
HR      LOCATIONS                26-05-18
HR      DEPARTMENTS              26-05-18
HR      JOBS                     26-05-18
HR      EMPLOYEES                12-10-18
..
..

Un alias predefinido más sofisticado se conoce como Tables2, que muestra varias otras columnas.

SQL> tables2

Tables
======
TABLE_NAME                 NUM_ROWS   BLOCKS   UNFORMATTED_SIZE COMPRESSION     INDEX_COUNT   CONSTRAINT_COUNT   PART_COUNT LAST_ANALYZED
AN_IP_TABLE                       0        0                  0 Disabled                  0                  0            0 > Month
PARTTABLE                         0        0                  0                           1                  0            1 > Month
TST2                              0        0                  0 Disabled                  0                  0            0 > Month
TST3                              0        0                  0 Disabled                  0                  0            0 > Month
MANAGE_EMPLYEE                    0        0                  0 Disabled                  0                  0            0 > Month
PRODUCT                           0        0                  0 Disabled                  0                  0            0 > Month
ALL_TAB_X78EHRYFK                 0        0                  0 Disabled                  0                  0            0 > Month
TBW                               0        0                  0 Disabled                  0                  0            0 > Month
DEPT                              0        0                  0 Disabled                  0                  0            0 > Month

Para saber qué consulta se ejecuta en segundo plano, ingrese

alias list tables2

Esto le mostrará una consulta un poco más compleja junto con predefinidos column definiciones de uso común en SQL * Plus.

Jeff Smith explica más sobre los alias aquí

respondido 31 mar '19, 16:03

La siguiente consulta solo enumera los datos requeridos, mientras que las otras respuestas me dieron los datos adicionales que solo me confundieron.

select table_name from user_tables;

respondido 29 nov., 14:09

Estaba buscando obtener una lista de todos los nombres de columnas que pertenecen a una tabla de un esquema ordenado por el orden de identificación de columna.

Aquí está la consulta que estoy usando: -

SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;

Respondido 18 Abr '18, 06:04

De hecho, es posible tener la lista de tablas a través de consultas SQL. Es posible hacerlo también a través de herramientas que permiten la generación de diccionarios de datos, como ERWIN, Modelador de datos de sapo or ERBuilder. Con estas herramientas, además de los nombres de las tablas, tendrás campos, sus tipos, objetos como (triggers, secuencias, dominio, vistas ...)

A continuación, los pasos a seguir para generar la definición de sus tablas:

  1. Tienes que aplicar ingeniería inversa a tu base de datos
    • En el modelador de datos de Toad: Menú -> Archivo -> ingeniería inversa -> asistente de ingeniería inversa
    • En el modelador de datos ERBuilder: Menú -> Archivo -> ingeniería inversa

Su base de datos se mostrará en el software como un diagrama de relación entre entidades.

  1. Genere su diccionario de datos que contendrá la definición de sus tablas
    • En el modelador de datos de Toad: Menú -> Modelo -> Generar informe -> Ejecutar
    • En el modelador de datos ERBuilder: Menú -> Herramienta -> generar documentación del modelo

Respondido 09 Jul 19, 16:07

Ejecute los siguientes comandos:

Mostrar todas las tablas en la base de datos de Oracle

sql> SELECT table_name FROM dba_tables;

Mostrar tablas propiedad del usuario actual

sql> SELECT table_name FROM user_tables;

Mostrar tablas a las que puede acceder el usuario actual

sql> SELECT table_name FROM all_tables ORDER BY table_name; La siguiente imagen ilustra las tablas que se pueden devolver desde las vistas user_tables, all_tables y dba_tables:

Respondido el 16 de Septiembre de 20 a las 13:09

select * from all_all_tables

este 'todo' adicional al principio da 3 columnas adicionales que son:

OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE

Respondido el 03 de diciembre de 19 a las 14:12

Igual que esta respuesta, ¿No? - mustaccio

Tablas en el usuario actual: esquema de inicio de sesión

select * from tabs;

respondido 06 nov., 20:16

Para obtener todos los nombres de las tablas, podemos usar:

Select  owner, table_name  from all_tables;

si tiene permiso de dba, puede usar:

Select owner, table_name from dba_tables;

Respondido 26 Feb 21, 16:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.