Как я могу запросить базу данных Oracle для отображения имен всех таблиц в ней?
Получить список всех таблиц в Oracle?
Ответ 1
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 объединяет таблицы и синонимы и не говорит вам, кому принадлежит этот объект.
Ответ 2
Запрос user_tables и dba_tables не работает.
Это сделал:
select table_name from all_tables
Ответ 3
Идя еще на один шаг, существует другое представление, называемое cols (all_tab_columns), которое может использоваться для определения того, какие таблицы содержат заданное имя столбца.
Например:
SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';
чтобы найти все таблицы, имеющие имя, начинающееся с EST, и столбцы, содержащие CALLREF в любом месте их имен.
Это может помочь при разработке тех столбцов, к которым вы хотите присоединиться, например, в зависимости от ваших соглашений об именах таблиц и столбцов.
Ответ 4
Для лучшего просмотра с помощью 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;
Результаты
Это должно привести к тому, что выглядит довольно приемлемым, например:

Ответ 5
Простой запрос для выбора таблиц для текущего пользователя:
SELECT table_name FROM user_tables;
Ответ 6
select object_name from user_objects where object_type='TABLE';
---------------- ИЛИ ------------------
select * from tab;
---------------- ИЛИ ------------------
select table_name from user_tables;
Ответ 7
Попробуйте просмотреть словарные данные ниже.
tabs
dba_tables
all_tables
user_tables
Ответ 8
Существует 3 данных для этого
DBA_TABLES описывает все реляционные таблицы в базе данных.
SELECT owner, table_name
FROM dba_tables
Описание реляционных таблиц, доступных пользователю
SELECT owner, table_name
FROM all_tables
USER_TABLES описывает реляционные таблицы, принадлежащие текущему пользователю. Это представление не отображает столбец ВЛАДЕЛЕЦ.
SELECT table_name
FROM user_tables
Ответ 9
Попробуйте выбрать user_tables, в котором перечислены таблицы, принадлежащие текущему пользователю.
Ответ 10
С помощью любого из них вы можете выбрать:
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';
Ответ 11
База данных 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
Ответ 12
select * from dba_tables
предоставляет все таблицы всех пользователей только в том случае, если пользователь, с которым вы вошли в систему, имеет привилегии sysdba.
Ответ 13
Ниже приведен закомментированный фрагмент SQL-запросов, описывающий, как можно использовать параметры:
-- need to have select catalog role
SELECT * FROM dba_tables;
-- to see tables of your schema
SELECT * FROM user_tables;
-- tables inside your schema and tables of other schema which you possess select grants on
SELECT * FROM all_tables;
Ответ 14
Вы можете использовать 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, если хотите.
Ответ 15
Я не нашел ответа, который указывал бы на использование
DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
так решил добавить мою версию. Этот вид фактически возвращает больше, чем DBA_TABLES, поскольку он возвращает также таблицы объектов (http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm).
Ответ 16
Включая представления:
SELECT owner, table_name as table_view
FROM dba_tables
UNION ALL
SELECT owner, view_name as table_view
FROM DBA_VIEWS
Ответ 17
Мы можем получить все таблицы, включая детали столбцов, из запроса ниже:
SELECT * FROM user_tab_columns;
Ответ 18
Следующий запрос содержит только список необходимых данных, тогда как другие ответы дали мне дополнительные данные, которые меня только смутили.
select table_name from user_tables;
Ответ 19
Новая функция, доступная в SQLcl (это бесплатный интерфейс командной строки для Oracle Database),
Tables псевдоним.
Вот несколько примеров, показывающих использование и дополнительные аспекты функции. Сначала подключитесь к sql.exe командной строки sql (sql.exe в windows). Рекомендуется вводить эту конкретную команду sqlcl перед выполнением любых других команд или запросов, которые отображают данные.
SQL> set sqlformat ansiconsole -- resizes the columns to the width of the
-- data to save space
SQL> tables
TABLES
-----------
REGIONS
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
..
Чтобы узнать, на что ссылается псевдоним tables, вы можете просто использовать alias List<alias>
SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------
select table_name "TABLES" from user_tables
Вам не нужно определять этот псевдоним, так как он используется по умолчанию в SQLcl. Если вы хотите получить список таблиц из определенной схемы, используя новый пользовательский псевдоним и передавая имя схемы в качестве аргумента привязки с отображением только набора столбцов, вы можете сделать это, используя
SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;
После этого вы можете просто передать имя схемы в качестве аргумента.
SQL> tables_schema HR
OWNER TABLE_NAME LAST_ANALYZED
HR DUMMY1 18-10-18
HR YOURTAB2 16-11-18
HR YOURTABLE 01-12-18
HR ID_TABLE 05-12-18
HR REGIONS 26-05-18
HR LOCATIONS 26-05-18
HR DEPARTMENTS 26-05-18
HR JOBS 26-05-18
HR EMPLOYEES 12-10-18
..
..
Более сложный предопределенный псевдоним известен как Tables2, который отображает несколько других столбцов.
SQL> tables2
Tables
======
TABLE_NAME NUM_ROWS BLOCKS UNFORMATTED_SIZE COMPRESSION INDEX_COUNT CONSTRAINT_COUNT PART_COUNT LAST_ANALYZED
AN_IP_TABLE 0 0 0 Disabled 0 0 0 > Month
PARTTABLE 0 0 0 1 0 1 > Month
TST2 0 0 0 Disabled 0 0 0 > Month
TST3 0 0 0 Disabled 0 0 0 > Month
MANAGE_EMPLYEE 0 0 0 Disabled 0 0 0 > Month
PRODUCT 0 0 0 Disabled 0 0 0 > Month
ALL_TAB_X78EHRYFK 0 0 0 Disabled 0 0 0 > Month
TBW 0 0 0 Disabled 0 0 0 > Month
DEPT 0 0 0 Disabled 0 0 0 > Month
Чтобы узнать, какой запрос выполняется в фоновом режиме, введите
alias list tables2
Это покажет вам немного более сложный запрос вместе с предопределенными определениями column обычно используемыми в SQL * Plus.
Джефф Смит объясняет больше об псевдонимах здесь
Ответ 20
Я искал список всех имен столбцов, принадлежащих таблице схемы, отсортированный по порядку идентификатора столбца.
Вот запрос, который я использую: -
SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;
Ответ 21
Действительно, список таблиц можно получить с помощью запросов SQL. Это можно сделать также с помощью инструментов, которые позволяют создавать словари данных, такие как ERWIN, Toad Data Modeler или ERBuilder. С этими инструментами, в дополнение к именам таблиц, у вас будут поля, их типы, объекты типа (триггеры, последовательности, домен, представления...)
Ниже приведены шаги, которые необходимо выполнить для создания определения таблиц:
- Вы должны перепроектировать вашу базу данных
- В Toad Data Modeler: Меню → Файл → Реверс инжиниринг → Мастер реинжиниринга
- В ERBuilder Data Modeler: Меню → Файл → Обратный инженер
Ваша база данных будет отображаться в программном обеспечении в виде диаграммы отношений сущностей.
- Создайте свой словарь данных, который будет содержать ваше определение таблиц
- В Моделе данных жаб: Меню → Модель → Создать отчет → Выполнить
- В ERBuilder Data Modeler: Меню → Инструмент → создать документацию модели