Anda di halaman 1dari 3

Listar todas las tablas en Oracle

Vamos a ver como realizar listados de tablas por tablespace o por usuario.
Para poder realizar listados de tablas podemos consultar varias tablas del data dictionary:

 DBA_TABLES: Contiene todas las tablas de la base de datos


 ALL_TABLES: Contiene todas las tablas accesibles por el usuario (las propias más las que
tiene permisos sobre ellas)
 USER_TABLES: Contiene totas las tablas del usuario
 DBA_SEGMENTS: Contiene todos los segmentos de la base de datos, esto incluye tablas,
indices y segmentos de rollback entre otros:

SQL> select distinct SEGMENT_TYPE from DBA_SEGMENTS;

Así, la tabla DBA_SEGMENTS contiene la tabla DBA_TABLES más el resto de segmentos de la


base de datos:

SQL> select count(*) from DBA_SEGMENTS;

COUNT(*)
----------
5783

SQL> select count(*) from DBA_TABLES;

COUNT(*)
----------
2083

Usando la tabla DBA_TABLES tenemos las siguientes columnas:

SQL> desc DBA_TABLES;

Los campos que vamos a ver son los siguientes:

 OWNER: Propietario del segmento


 SEGMENT_NAME: Nombre del segmento
 TABLESPACE_NAME: Nombre del tablespace al que pertenece
Mediante simples consultas SQL podemos obtener los datos que queremos. Por ejemplo, para listar el
nombre de todas las tablas de la base de datos Oracle haríamos:
SQL> select TABLE_NAME from DBA_TABLES;
Este comando sería el equivalente al SHOW TABLES; de MySQL.

Para contar todas las tablas del tablespace UNIT001 haríamos lo siguiente:
SQL> select count(*) from DBA_TABLES where TABLESPACE_NAME='UNIT001';

Y para contar las tablas de cada usuario podríamos hacer lo siguiente:

SQL> select count(*), OWNER from DBA_TABLES group by OWNER;

#####################

En ocasiones es bastante útil buscar el nombre de alguna columna conocida de una tabla en todas las
tablas de un esquema de base de datos de Oracle. Sobre todo cuando tienes cientos de tablas, y si los
nombres son consistentes es fácil buscar en que otras tablas está dicho nombre, más allá de que
SQLDeveloper trae una opción para mostrar el diagrama de las tablas y sus relaciones.

Así que si se quiere buscar un campo en particular, escribimos:


SELECT table_name from all_tab_columns where column_name = 'USERID';
# también podríamos usar where column_name like '%USERID%';

De esa forma nos va a devolver el listado de tablas que tengan esa columna, es muy útil cuando no se
recuerda o no se conoce la estructura de toda la DB.
Otra sentencia útil que utilizo para mostrar la descripción (estructura) de una tabla:
SELECT column_name, data_type, data_length, data_precision, data_scale, nullable
FROM all_tab_columns WHERE table_name = 'NOMBRE_TABLA';

Obtener datos de tablas y columnas en Oracle


Para obtener datos de una o varias tablas en Oracle, ya sea columnas, tipos de dato, comentarios, largo
máximo, etc. se pueden consultar a las siguientes tablas de sistema :

 ALL_TABLES : para obtener datos de las tablas.


 ALL_TAB_COLUMNS : para obtener datos de las columnas.
 ALL_COL_COMMENTS : para obtener los comentarios ingresados a las columnas

La siguiente consulta utiliza las 3 tablas para obtener la información necesaria para hacer un
diccionario de datos:
SELECT col.owner, col.table_name, col.column_name, col.data_type,
col.data_length, col.nullable, col.data_default,
com.comments FROM all_tab_columns col, all_col_comments com WHERE
col.table_name = com.table_name AND
col.column_name = com.column_name AND col.owner=com.owner AND
col.owner = 'FFCC' ORDER BY col.table_name, col.column_id

Nota : En la consulta, fue necesario filtrar por owner para que solo traiga las tablas necesarias.