Як я перерахувати всі таблиці на схемі в Oracle SQL?
Як я перерахувати всі таблиці на схемі в Oracle SQL?
Відповіді:
Щоб побачити всі таблиці в іншій схемі, вам потрібно мати одну або декілька таких системних привілеїв:
SELECT ANY DICTIONARY
(SELECT | INSERT | UPDATE | DELETE) ANY TABLE
або великим молотом, роль DBA.
З будь-яким із них ви можете вибрати:
SELECT DISTINCT OWNER, OBJECT_NAME
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
Без цих системних привілеїв ви можете бачити лише таблиці, яким ви отримали певний рівень доступу, безпосередньо чи через роль.
SELECT DISTINCT OWNER, OBJECT_NAME
FROM ALL_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
Нарешті, ви завжди можете запитувати словник даних для своїх власних таблиць, оскільки ваші права на ваші таблиці не можуть бути відкликані (станом на 10 г):
SELECT DISTINCT OBJECT_NAME
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
DISTINCT
запиті абсолютно немає необхідності . owner, object_name
є унікальним уALL_OBJECTS
owner, object_name
не є унікальним жодним чином у dba_objects; Органи та пакети пакунків відображаються в цьому вікні, а таблиці та покажчики знаходяться в різних просторах імен.
SELECT table_name from all_tables where owner = 'YOURSCHEMA';
Ви можете запитувати USER_TABLES
select TABLE_NAME from user_tables
Спробуйте це, замінити? з назвою схеми
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =?
AND TABLE_TYPE = 'BASE TABLE'
Якщо ви отримуєте доступ до Oracle за допомогою JDBC (Java), ви можете використовувати клас DatabaseMetadata . Якщо ви звертаєтесь до Oracle за допомогою ADO.NET, ви можете скористатися подібним підходом.
Якщо ви отримуєте доступ до Oracle за допомогою ODBC, ви можете використовувати функцію SQLTables .
В іншому випадку, якщо вам просто потрібна інформація в SQLPlus або подібному клієнті Oracle, один із запитів, про який вже говорилося, виконає. Наприклад:
select TABLE_NAME from user_tables
select * from cat;
він покаже всі таблиці у вашій схемі cat синонім user_catalog
select TABLE_NAME from user_tables;
Наведений вище запит дасть вам імена всіх таблиць, присутніх у цього користувача;
Ви можете безпосередньо запустити другий запит, якщо знаєте ім'я власника.
- Спочатку ви можете вибрати, які всі ВЛАСНІЦІ там існують:
SELECT DISTINCT(owner) from SYS.ALL_TABLES;
- Тоді ви можете побачити таблиці під цим власником:
SELECT table_name, owner from all_tables where owner like ('%XYZ%');
Подивіться на мою просту утиліту, щоб показати деяку інформацію про схему db. Він заснований на: Зворотна інженерія моделі даних за допомогою словника даних Oracle
Якщо вам також потрібно отримати розмір таблиці, це буде зручно:
select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1
Назва лічильника таблиці та рядків для всіх таблиць у OWNER
схемі:
SELECT table_name, num_rows counter from DBA_TABLES WHERE owner = 'OWNER'
%_OBJECTS
замість цього%_TABLES
.