¿Cómo consulto una base de datos Oracle para mostrar los nombres de todas las tablas que contiene?
¿Cómo consulto una base de datos Oracle para mostrar los nombres de todas las tablas que contiene?
Respuestas:
SELECT owner, table_name
FROM dba_tables
Esto supone que tiene acceso a la DBA_TABLES
vista del diccionario de datos. Si no tiene esos privilegios pero los necesita, puede solicitar que el DBA le otorgue explícitamente privilegios en esa tabla, 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 un gran número de tablas Oracle que probablemente no le interesen.
Alternativamente, si no tiene acceso DBA_TABLES
, puede ver todas las tablas a las que su cuenta tiene acceso a través de la ALL_TABLES
vista:
SELECT owner, table_name
FROM all_tables
Sin embargo, puede ser un subconjunto de las tablas disponibles en la base de datos (le ALL_TABLES
muestra la información de todas las tablas a las que se le ha otorgado acceso a su usuario).
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 una OWNER
columna: el propietario, por definición, es usted.
Oracle también tiene una serie de datos heredados diccionario views-- TAB
, DICT
, TABS
, y CAT
por ejemplo- que podrían ser utilizados. En general, no sugeriría usar estas vistas heredadas a menos que sea absolutamente necesario que envíe 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, las vistas TAB
y CAT
muestran información sobre las tablas que están en la papelera de reciclaje del usuario, mientras que las [DBA|ALL|USER]_TABLES
vistas las filtran. CAT
también muestra información sobre registros de vista materializados con una TABLE_TYPE
"TABLA" que es poco probable que sea lo que realmente desea. DICT
combina tablas y sinónimos y no le dice quién posee el objeto.
Consultando user_tables
y dba_tables
no funcionó.
Este 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 buscar todas las tablas que tengan un nombre que comience con EST y columnas que contengan CALLREF en cualquier parte de sus nombres.
Esto puede ayudar a determinar en qué columnas desea unirse, por ejemplo, según sus convenciones de nombres de tabla y columna.
select * from cols
y obtuve 0 filas devueltas.
sqlplus
Si está utilizando, sqlplus
es posible que primero desee configurar algunos parámetros para una mejor visualización si sus columnas se están destrozando (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
Luego puede usar 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" en realidad pueden ser "vistas", por lo que también puede intentar ejecutar algo como:
SELECT view_name FROM all_views;
Esto debería producir algo que se ve bastante aceptable como:
pagesize 30
con pagesize 1000
?
Consulta simple para seleccionar las tablas para el usuario actual:
SELECT table_name FROM user_tables;
Pruebe las siguientes vistas del diccionario de datos.
tabs
dba_tables
all_tables
user_tables
Intente seleccionar de user_tables que enumera las tablas que posee el usuario actual.
Base de datos Oracle para mostrar los nombres de todas las tablas usando la consulta a continuación
SELECCIONAR propietario, nombre_tabla DESDE dba_tables; SELECCIONAR propietario, table_name FROM all_tables; SELECT table_name FROM user_tables;
vistiendo más: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html
select * from dba_tables
proporciona todas las tablas de todos los usuarios solo si el usuario con el que inició sesión tiene los sysdba
privilegios.
No encontré la 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 de DBA_TABLES, ya que también devuelve tablas de objetos ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ).
Puede usar Oracle Data Dictionary para obtener información sobre los objetos .
Puede obtener una lista de tablas de diferentes maneras:
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 (disparadores, 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 puede usar USER
o ALL
vistas en lugar de DBA
si lo desea.
Podemos obtener todas las tablas, incluidos los detalles de la columna de la consulta a continuación:
SELECT * FROM user_tab_columns;
A continuación se muestra un fragmento comentado de consultas SQL que describe cómo puede usar las opciones:
-- 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;
Una nueva característica disponible en SQLcl (que es una interfaz de línea de comandos gratuita para Oracle Database) es
Tables
alias.
Aquí hay algunos ejemplos que muestran el uso y los aspectos adicionales de la función. Primero, conéctese a una sesión de sql
línea de comando ( sql.exe
en Windows). 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 a qué tables
se refiere el alias, simplemente puede usaralias 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 por defecto 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 argumento de enlace con solo un conjunto de columnas que se muestran, puede hacerlo utilizando
SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;
Posteriormente, 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 column
definiciones predefinidas comúnmente utilizadas en SQL * Plus.
Jeff Smith explica más sobre los alias aquí
Estaba buscando obtener una lista de todos los nombres de columnas que pertenecen a una tabla de un esquema ordenado por el orden de la identificación de la 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;
De hecho, es posible tener la lista de tablas a través de consultas SQL. También es posible hacerlo a través de herramientas que permiten la generación de diccionarios de datos, como ERWIN , Toad Data Modeler o ERBuilder. . Con estas herramientas, además de los nombres de las tablas, tendrá campos, sus tipos, objetos como (disparadores, secuencias, dominio, vistas ...)
A continuación los pasos a seguir para generar su definición de tablas:
Su base de datos se mostrará en el software como un diagrama de Relación de entidad.
select * from all_all_tables
este 'todo' adicional al principio da 3 columnas adicionales que son:
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
SHOW TABLES
(como se hace en MySQL)?