Получить список всех таблиц в Oracle?

862

Как я могу запросить базу данных Oracle для отображения имен всех таблиц в ней?

  • 1
    SHOW TABLES ли SHOW TABLES (как в MySQL)?
  • 1
    @MartinThoma Нету. попробовал сначала, прежде чем прибегнуть к гуглу
Теги:

18 ответов

1029
Лучший ответ
SELECT owner, table_name
  FROM dba_tables

Предполагается, что у вас есть доступ к представлению словаря данных DBA_TABLES. Если у вас нет этих привилегий, но они нуждаются в них, вы можете запросить, чтобы администратор базы данных явно предоставлял вам привилегии в этой таблице или что администратор базы данных предоставляет вам привилегию SELECT ANY DICTIONARY или SELECT_CATALOG_ROLE (любой из которых позволит вам для запроса любой таблицы словаря данных). Конечно, вы можете исключить некоторые схемы, такие как SYS и SYSTEM, которые имеют большое количество таблиц Oracle, которые вам, вероятно, не волнует.

В качестве альтернативы, если у вас нет доступа к DBA_TABLES, вы можете увидеть все таблицы, к которым ваша учетная запись имеет доступ, через представление ALL_TABLES:

SELECT owner, table_name
  FROM all_tables

Хотя это может быть подмножество таблиц, доступных в базе данных (ALL_TABLES показывает вам информацию для всех таблиц, которым был предоставлен ваш пользователь).

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

SELECT table_name
  FROM user_tables

Так как USER_TABLES имеет только информацию о собственных таблицах, у нее нет столбца OWNER - владелец, по определению, вы.

Oracle также имеет ряд устаревших видов словарей данных - TAB, DICT, TABS и CAT например - которые могут быть использованы. В общем, я бы не предложил использовать эти устаревшие представления, если вам не нужно полностью использовать ваши сценарии для Oracle 6. Oracle не изменил эти представления за долгое время, поэтому у них часто возникают проблемы с новыми типами объектов. Например, представления TAB и CAT отображают информацию о таблицах, которые находятся в корзине пользователя, в то время как теги [DBA|ALL|USER]_TABLES все фильтруют их. CAT также показывает информацию о материализованных журналах просмотра с TABLE_TYPE в таблице "ТАБЛИЦА", которая вряд ли будет тем, что вы действительно хотите. DICT объединяет таблицы и синонимы и не говорит вам, кому принадлежит этот объект.

  • 8
    Я получаю исключение "ORA-00942: таблица или представление не существует"
  • 40
    Тогда вам не дали разрешение на просмотр всех таблиц в базе данных. Вы можете запросить представление словаря данных ALL_TABLES, чтобы увидеть все таблицы, к которым у вас есть доступ, которые могут быть небольшим подмножеством таблиц в базе данных.
Показать ещё 4 комментария
143

Запрос user_tables и dba_tables не работает.
Это сделал:

select table_name from all_tables  
  • 27
    Для более полного ответа см. Принятый ответ, включая комментарии.
  • 13
    @LimitedAtonement Извините, это неправильно. Представление называется user_tables, а не user_table. Если user_tables не работает для vitule, что-то еще не так.
52

Идя еще на один шаг, существует другое представление, называемое cols (all_tab_columns), которое может использоваться для определения того, какие таблицы содержат заданное имя столбца.

Например:

SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';

чтобы найти все таблицы, имеющие имя, начинающееся с EST, и столбцы, содержащие CALLREF в любом месте их имен.

Это может помочь при разработке тех столбцов, к которым вы хотите присоединиться, например, в зависимости от ваших соглашений об именах таблиц и столбцов.

  • 4
    Я select * from cols и получил 0 строк.
31

Для лучшего просмотра с помощью sqlplus

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

set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000

Показать все таблицы

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

SELECT table_name, owner, tablespace_name FROM all_tables;

Показать таблицы, которыми вы владеете

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

SELECT table_name FROM user_tables;

Не забывайте о представлениях

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

SELECT view_name FROM all_views;

Результаты

Это должно привести к тому, что выглядит довольно приемлемым, например:

Изображение 4036

  • 8
    спасибо за "лучший просмотр" совета, но вы не перезаписываете pagesize 30 с pagesize 1000 ?
17

Простой запрос для выбора таблиц для текущего пользователя:

  SELECT table_name FROM user_tables;
12
    select object_name from user_objects where object_type='TABLE';

---------------- ИЛИ ------------------

    select * from tab;

---------------- ИЛИ ------------------

    select table_name from user_tables;
11

Попробуйте просмотреть словарные данные ниже.

tabs
dba_tables
all_tables
user_tables
  • 2
    Что не так с принятым ответом?
  • 1
    Принятые ответы не ошибаются, но в этом комментарии я перечисляю все представления словаря данных, которые я могу использовать, чтобы получить таблицы в базе данных.
Показать ещё 1 комментарий
6

Попробуйте выбрать user_tables, в котором перечислены таблицы, принадлежащие текущему пользователю.

5

С помощью любого из них вы можете выбрать:

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM DBA_OBJECTS 
    WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM ALL_OBJECTS 
    WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';
  • 1
    Да, но есть, вероятно, сотни других способов получить эту информацию. Если нет никакого преимущества, это не должно быть перечислено здесь. Этот вопрос уже полон слишком много информации, которая просто запутает людей, ищущих помощи.
  • 0
    Это как математический язык.
Показать ещё 3 комментария
4

Существует 3 элемента данных для этого

DBA_TABLES описывает все реляционные таблицы в базе данных.

SELECT owner, table_name
  FROM dba_tables

Описание реляционных таблиц, доступных пользователю

SELECT owner, table_name
  FROM all_tables

USER_TABLES описывает реляционные таблицы, принадлежащие текущему пользователю. В этом представлении не отображается столбец OWNER.

SELECT table_name
  FROM user_tables
4
select * from dba_tables

предоставляет все таблицы всех пользователей только в том случае, если пользователь, с которым вы вошли в систему, имеет привилегии sysdba.

  • 4
    Это на самом деле не правильно. SYSDBA не требуется. Вы можете получить доступ к DBA_TABLES многими способами. 1.) Прямое предоставление на объект пользователю по SYS. 2.) Предоставление пользователю права ВЫБРАТЬ ЛЮБОЙ СЛОВАРЬ. 3.) Предоставление роли SELECT_CATALOG_ROLE.
2

Я не нашел ответа, который указывал бы на использование

DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)

так решил добавить мою версию. Этот вид фактически возвращает больше, чем DBA_TABLES, поскольку он возвращает также таблицы объектов (http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm).

2

Вы можете использовать Oracle Data Dictionary, чтобы получить информацию об объектах oracle.

Вы можете получить список таблиц по-разному:

select * 
from dba_tables

или, например:

select * 
from dba_objects 
where object_type = 'TABLE' 

Затем вы можете получить столбцы таблицы, используя имя таблицы:

select * 
from dba_tab_columns

Затем вы можете получить список зависимостей (триггеры, представления и т.д.):

select * 
from dba_dependencies
where referenced_type='TABLE' and referenced_name=:t_name 

Затем вы можете получить текстовый источник этих объектов:

select * from dba_source

И вы можете использовать USER или ALL представления вместо DBA, если хотите.

1

Мы можем получить все таблицы, включая сведения о столбцах, из нижеприведенного запроса.

Выберите * из user_tab_columns;

1

Включая представления:

SELECT owner, table_name as table_view
  FROM dba_tables
UNION ALL
SELECT owner, view_name as table_view
  FROM DBA_VIEWS
1

База данных Oracle для отображения имен всех таблиц с использованием нижеприведенного запроса

SELECT owner, table_name FROM dba_tables;

SELECT owner, table_name FROM all_tables;

SELECT table_name FROM user_tables;

vist more: http://www.oracleinformation.com/2016/08/get-list-of-all-tables-in-oracle-sql.html

1

Выберите * из dba_tables; - необходимо выбрать роль каталога

Выберите * из user_tables; - чтобы увидеть таблицы вашей схемы

Выберите * из all_tables; - таблицы внутри вашей шманы и таблицы схемы orher, которые у вас есть выделенные гранты на

1

Следующий запрос содержит только список необходимых данных, тогда как другие ответы дали мне дополнительные данные, которые меня только смутили.

select table_name from user_tables;

Ещё вопросы

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