it-swarm-ru.tech

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

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

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

1271
Justin Cave

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

select table_name from all_tables  
169
vitule

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

Например:

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

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

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

62
stealth_angoid

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

46
cwd

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

  SELECT table_name FROM user_tables;
21
Israel Margulies
    select object_name from user_objects where object_type='TABLE';

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

    select * from tab;

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

    select table_name from user_tables;
17
Harshil

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

tabs
dba_tables
all_tables
user_tables
14
Mahmoud Ahmed El-Sayed

Существует 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
Kamil Ibadov

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

8
Eddie Awad

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

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';
6
Van Gogh
select * from dba_tables

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

5
praveen2609

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

 SELECT владелец, имя_таблицы FROM dba_tables; 

 SELECT владелец, имя_таблицы FROM all_tables; 

 SELECT имя_таблицы FROM user_tables;

более подробно: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-Oracle.html

5
Brahmareddy K

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

SELECT * FROM user_tab_columns;
3
aim_thebest

В том числе просмотров:

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

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

3
Slava Babin

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

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

DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)

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

3
Rusty

Новая функция, доступная в 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.

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

2
Kaushik Nayak

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

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

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

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

select table_name from user_tables;
0
Mateen