Получить список всех таблиц в Oracle? - PullRequest
1032 голосов
/ 15 октября 2008

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

Ответы [ 20 ]

1292 голосов
/ 15 октября 2008
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 из «TABLE», что вряд ли будет тем, что вы действительно хотите. DICT объединяет таблицы и синонимы и не сообщает вам, кому принадлежит объект.

173 голосов
/ 15 октября 2008

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

select table_name from all_tables  
62 голосов
/ 04 сентября 2009

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

Например:

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

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

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

48 голосов
/ 17 июля 2014

Для лучшего просмотра с 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;

Результаты

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

result

21 голосов
/ 21 декабря 2012

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

  SELECT table_name FROM user_tables;
17 голосов
/ 08 октября 2014
    select object_name from user_objects where object_type='TABLE';

---------------- OR ------------------

    select * from tab;

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

    select table_name from user_tables;
14 голосов
/ 25 апреля 2012

Попробуйте следующие виды словаря данных.

tabs
dba_tables
all_tables
user_tables
9 голосов
/ 16 февраля 2017

Существует 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
8 голосов
/ 15 октября 2008

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

6 голосов
/ 17 августа 2016

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

SELECT owner, table_name FROM dba_tables;

SELECT owner, table_name FROM all_tables;

SELECT table_name FROM user_tables;

Вист больше: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...