Как мне перечислить все таблицы в схеме в Oracle SQL?

108

Как мне перечислить все таблицы в схеме в Oracle SQL?

Теги:

12 ответов

152
Лучший ответ

Чтобы просмотреть все таблицы в другой схеме, вам необходимо иметь одну или несколько следующих системных привилегий:

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

Наконец, вы всегда можете запросить словарь данных для своих собственных таблиц, так как ваши права на ваши таблицы не могут быть отменены (начиная с 10g):

SELECT DISTINCT OBJECT_NAME 
  FROM USER_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'
  • 2
    «наиболее полный ответ», кроме использования %_OBJECTS вместо %_TABLES .
  • 0
    Я помню в 9i, что представления будут перечислены в% _TABLES - поэтому, например, попытка автоматизировать очистку схемы приведет к тому, что операторы типа DROP TABLE REALLY_A_VIEW CASCADE CONSTRAINTS будут выдавать ошибки. Так что вам придется либо удалить представления с помощью MINUS / NOT IN / NOT EXISTS, либо перейти к% _OBJECTS. Кроме того, если вы будете идти против% _OBJECTS, вы оставите дразнящий намек на то, что еще может быть там!
Показать ещё 3 комментария
47
SELECT table_name  from all_tables where owner = 'YOURSCHEMA';
  • 5
    Схема должна быть в верхнем регистре
  • 2
    Все таблицы в YOURSCHEMA будут отображаться только в том случае, если они выполняются YOURSCHEMA или пользователем с привилегиями, указанными Адамом Мушем. В противном случае он просто показывает таблицы в YOURSCHEMA, к которым нам предоставлены привилегии.
11

Вы можете запросить USER_TABLES

select TABLE_NAME from user_tables
  • 5
    Это все таблицы в ВАШЕЙ схеме, а не все таблицы в схеме. Кроме того, представления словаря данных * _TABLES (DBA_TABLES, ALL_TABLES, USER_TABLES) включают представления.
  • 0
    замените «включить представления» на «можно включать представления в семи версиях Oracle».
Показать ещё 1 комментарий
4

Если вы вошли в систему как обычный пользователь без разрешения DBA, вы можете использовать следующую команду, чтобы увидеть свою собственную схему всех таблиц и представлений.

select * from tab;
3
select * from user_tables;

(показаны все таблицы)

3

Попробуйте это, замените? с именем вашей схемы

select TABLE_NAME from  INFORMATION_SCHEMA.TABLES
 WHERE TABLE_SCHEMA =?
  AND TABLE_TYPE = 'BASE TABLE'
  • 2
    Это больше не зависит от базы данных, и поэтому я думаю, что этот тип решения лучше всех альтернатив. Я думаю, что INFORMATION_SCHEMA работает практически со всеми основными базами данных, которые я видел. Хотя некоторые из них отличаются информацией, которую вы можете получить, по крайней мере, это постоянное место для поиска. Однако из-за быстрого поиска в Интернете Oracle, похоже, является единственной базой данных, которая не поддерживает Information_Schema, хотя она является частью стандарта SQL-92.
  • 6
    Конечно, OP специально попросил решение Oracle ...
2

Если вы обращаетесь к Oracle с помощью JDBC (Java), вы можете использовать класс DatabaseMetadata. Если вы обращаетесь к Oracle с помощью ADO.NET, вы можете использовать аналогичный подход.

Если вы обращаетесь к Oracle с ODBC, вы можете использовать SQLTables.

В противном случае, если вам просто нужна информация в SQLPlus или аналогичном клиенте Oracle, один из запросов, о которых идет речь, будет делать. Например:

select TABLE_NAME from user_tables
1

SELECT имя_таблицы, владелец FROM all_tables, где owner = 'schema_name' order by table_name

1
select * from cat;

он отобразит все таблицы в вашей схеме cat синоним user_catalog

0

Если вам нужно также получить размер таблицы, это будет удобно:

select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1

0
select TABLE_NAME from user_tables;

Вышеуказанный запрос даст вам имена всех таблиц, имеющихся у этого пользователя;

0

Посмотрите на мою простую утилиту, чтобы показать некоторую информацию о схеме db. Он основан на: Обратное проектирование модели данных Использование словаря данных Oracle

Ещё вопросы

Сообщество Overcoder
Наверх
Меню