¿Cómo enumero todas las tablas en un esquema en Oracle SQL?
¿Cómo enumero todas las tablas en un esquema en Oracle SQL?
Respuestas:
Para ver todas las tablas en otro esquema, debe tener uno o más de los siguientes privilegios del sistema:
SELECT ANY DICTIONARY
(SELECT | INSERT | UPDATE | DELETE) ANY TABLE
o el gran martillo, el papel de DBA.
Con cualquiera de esos, puede seleccionar:
SELECT DISTINCT OWNER, OBJECT_NAME
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
Sin esos privilegios del sistema, solo puede ver las tablas a las que se le ha otorgado algún nivel de acceso, ya sea directamente o mediante un rol.
SELECT DISTINCT OWNER, OBJECT_NAME
FROM ALL_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
Por último, siempre puede consultar el diccionario de datos para sus propias tablas, ya que sus derechos sobre sus tablas no se pueden revocar (a partir de 10g):
SELECT DISTINCT OBJECT_NAME
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
DISTINCT
en la consulta. owner, object_name
es único enALL_OBJECTS
owner, object_name
no es único de ninguna manera en dba_objects; Los cuerpos de paquete y los paquetes aparecen en esa vista, y las tablas e índices están en diferentes espacios de nombres.
SELECT table_name from all_tables where owner = 'YOURSCHEMA';
Puedes consultar USER_TABLES
select TABLE_NAME from user_tables
Intenta esto, ¿reemplazar? con tu nombre de esquema
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =?
AND TABLE_TYPE = 'BASE TABLE'
Si accede a Oracle con JDBC (Java), puede usar la clase DatabaseMetadata . Si está accediendo a Oracle con ADO.NET, puede usar un enfoque similar.
Si está accediendo a Oracle con ODBC, puede usar la función SQLTables .
De lo contrario, si solo necesita la información en SQLPlus o un cliente de Oracle similar, una de las consultas ya mencionadas servirá. Por ejemplo:
select TABLE_NAME from user_tables
select * from cat;
mostrará todas las tablas en su sinónimo de gato de esquema de user_catalog
Puede ejecutar directamente la segunda consulta si conoce el nombre del propietario.
--Primero puede seleccionar qué existen todos los PROPIETARIOS que existen:
SELECT DISTINCT(owner) from SYS.ALL_TABLES;
- Entonces puede ver las tablas debajo de ese propietario:
SELECT table_name, owner from all_tables where owner like ('%XYZ%');
Mira mi sencilla utilidad para mostrar información sobre el esquema db. Se basa en: Ingeniería inversa de un modelo de datos utilizando el Diccionario de datos de Oracle
Si necesita obtener el tamaño de la tabla también, esto será útil:
select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1
Nombre de la tabla y el contador de filas para todas las tablas bajo OWNER
esquema:
SELECT table_name, num_rows counter from DBA_TABLES WHERE owner = 'OWNER'
%_OBJECTS
lugar de%_TABLES
.