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

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

вопрос задан 15.10.2008
vitule
7436 репутация

19 ответов


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

    ответ дан Justin Cave, с репутацией 184085, 15.10.2008
  • 161 рейтинг

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

     select table_name from all_tables  
     
    ответ дан vitule, с репутацией 7436, 15.10.2008
  • 59 рейтинг

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

    Например:

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

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

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

    ответ дан stealth_angoid, с репутацией 716, 4.09.2009
  • 42 рейтинг

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

    Результаты

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

    результат

    ответ дан cwd, с репутацией 26237, 17.07.2014
  • 20 рейтинг

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

       SELECT table_name FROM user_tables;
     
    ответ дан Israel Margulies, с репутацией 6781, 21.12.2012
  • 16 рейтинг
         select object_name from user_objects where object_type='TABLE';
     

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

         select * from tab;
     

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

         select table_name from user_tables;
     
    ответ дан Harshil, с репутацией 637, 8.10.2014
  • 14 рейтинг

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

     tabs
    dba_tables
    all_tables
    user_tables
     
    ответ дан Mahmoud Ahmed El-Sayed, с репутацией 222, 25.04.2012
  • 8 рейтинг

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

    ответ дан Eddie Awad, с репутацией 3259, 15.10.2008
  • 7 рейтинг

    Для этого существует 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
     
    ответ дан Kamil Ibadov, с репутацией 1192, 16.02.2017
  • 6 рейтинг

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

     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';
     
    ответ дан Van Gogh, с репутацией 325, 7.03.2014
  • 5 рейтинг
     select * from dba_tables
     

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

    ответ дан praveen2609, с репутацией 136, 14.08.2012
  • 5 рейтинг

    База данных 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.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html

    ответ дан Brahmareddy K, с репутацией 262, 17.08.2016
  • 3 рейтинг

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

     SELECT * FROM user_tab_columns;
     
    ответ дан aim_thebest, с репутацией 54, 20.11.2017
  • 3 рейтинг

    Включая взгляды:

     SELECT owner, table_name as table_view
      FROM dba_tables
    UNION ALL
    SELECT owner, view_name as table_view
      FROM DBA_VIEWS
     
    ответ дан Punnerud, с репутацией 352, 25.10.2017
  • 3 рейтинг

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

    ответ дан Slava Babin, с репутацией 469, 9.10.2016
  • 3 рейтинг

    Ниже приведен фрагмент комментариев 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;
     
    ответ дан Prashant Mishra, с репутацией 482, 21.06.2016
  • 3 рейтинг

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

     DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
     

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

    ответ дан Rusty, с репутацией 1729, 11.11.2016
  • 0 рейтинг

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

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

     SELECT COLUMN_NAME
    FROM ALL_TAB_COLUMNS
    WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
    ORDER BY COLUMN_ID ASC;
     
    ответ дан Rakesh Narang, с репутацией 21, 18.04.2018
  • 0 рейтинг

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

     select table_name from user_tables;
     
    ответ дан Mateen, с репутацией 658, 9.11.2014