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

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

SHOW TABLES (как в MySQL) работает?

Martin Thoma 10.08.2017 11:36

@MartinThoma нет. попробовал это сначала, прежде чем прибегать к Google

Adam Burley 09.02.2018 23:24
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1 137
2
2 208 686
24
Перейти к ответу Данный вопрос помечен как решенный

Ответы 24

Ответ принят как подходящий

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 объединяет таблицы и синонимы и не сообщает вам, кому принадлежит объект.

Я получаю исключение «ORA-00942: таблица или представление не существует»

vitule 15.10.2008 22:02

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

Justin Cave 15.10.2008 22:11

Простая ошибка, если не обычный пользователь sqlplus: добавьте конечную точку с запятой (';'), если вы просто не получаете результатов с помощью вышеуказанных команд :).

Gimhani 27.08.2018 09:19

Обратите внимание, что в Oracle 12c в словаре данных dba_users есть столбец, который помогает удалить системные таблицы из набора результатов. Полный запрос будет: SELECT owner, table_name from dba_tables, where owner not in (выберите имя пользователя из dba_users, где oracle_mainhibited = 'Y')

saritonin 25.02.2019 20:40

Как указано, у вас должен быть минимум разрешений SELECT для таблицы, чтобы увидеть ее, и это также только в том случае, если ваша учетная запись имеет доступ к ней через PUBLIC или PRIVATE синоним. ORA-00942 - возможно, самая частая ошибка, с которой вы можете столкнуться !!!

Allen 25.01.2021 20:59

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

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

select table_name from all_tables  

@LimitedAtonement Извините, это неправильно. Представление называется user_tables, а не user_table. Если user_tables не работает для vitule, значит что-то еще не так.

Frank Schmitt 26.04.2013 14:39

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

Например:

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

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

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

Я сделал select * from cols и получил 0 строк.

Gabe 19.04.2014 00:43

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

tabs
dba_tables
all_tables
user_tables

select * from dba_tables

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

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

Mark J. Bobak 24.11.2013 09:49

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

  SELECT table_name FROM user_tables;

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

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

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

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

Pablo Recalde 27.01.2016 11:40

    select object_name from user_objects where object_type='TABLE';

----------------ИЛИ ЖЕ------------------

    select * from tab;

----------------ИЛИ ЖЕ------------------

    select table_name from user_tables;

Первые 2 работали у меня. Последний возвращает «ни одной строки не выбрано». Интересно, почему?

Upulie Han 05.08.2020 22:02

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

select table_name from user_tables;

Ниже приведен закомментированный фрагмент 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;

База данных 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

Вы можете использовать Словарь данных 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, если хотите.

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

DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)

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

Включая просмотры:

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

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

SELECT * FROM user_tab_columns;

Я искал список всех имен столбцов, принадлежащих таблице схемы, отсортированный по порядку идентификатора столбца.

Вот запрос, который я использую: -

SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;

Новая функция, доступная в SQLcl (который является бесплатным интерфейсом командной строки для Oracle Database):

Tables псевдоним.

Вот несколько примеров, показывающих использование и дополнительные аспекты этой функции. Сначала подключитесь к сеансу командной строки 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.

Джефф Смит объясняет больше о псевдонимах здесь

Действительно, можно получить список таблиц с помощью SQL-запросов. Это можно сделать также с помощью инструментов, которые позволяют создавать словари данных, таких как Эрвин, Модельер данных жабы или ERBuilder. С помощью этих инструментов, помимо имен таблиц, у вас будут поля, их типы, такие объекты, как (триггеры, последовательности, домен, представления ...)

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

  1. Вы должны перепроектировать свою базу данных
    • В моделере данных Toad: Меню -> Файл -> Обратный инжиниринг -> Мастер обратного инжиниринга
    • В моделере данных ERBuilder: Меню -> Файл -> Обратный инжиниринг.

Ваша база данных будет отображаться в программе в виде диаграммы отношений сущностей.

  1. Создайте словарь данных, который будет содержать определение ваших таблиц.
    • В моделере данных Toad: Меню -> Модель -> Создать отчет -> Выполнить
    • В моделисте данных ERBuilder: Меню -> Инструмент -> создать документацию модели.

select * from all_all_tables

это дополнительное «все» в начале дает дополнительные 3 столбца:

OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE

То же, что и этот ответ, не так ли?

mustaccio 03.12.2019 17:43

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

Select  owner, table_name  from all_tables;

если у вас есть разрешение dba, вы можете использовать:

Select owner, table_name from dba_tables;

Выполните следующие команды:

Показать все таблицы в базе данных Oracle

sql> SELECT table_name FROM dba_tables;

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

sql> SELECT table_name FROM user_tables;

Показать таблицы, доступные текущему пользователю

sql> SELECT table_name FROM all_tables ORDER BY table_name;The following picture illustrates the tables that can be returned from the user_tables, all_tables, and dba_tables views:

Таблицы в текущем пользователе - схема входа в систему

select * from tabs;

Другие вопросы по теме