

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: таблица или представление не существует»
Значит, у вас нет разрешения на просмотр всех таблиц в базе данных. Вы можете запросить представление словаря данных ALL_TABLES, чтобы увидеть все таблицы, к которым вам разрешен доступ, которые могут быть небольшим подмножеством таблиц в базе данных.
Простая ошибка, если не обычный пользователь sqlplus: добавьте конечную точку с запятой (';'), если вы просто не получаете результатов с помощью вышеуказанных команд :).
Обратите внимание, что в Oracle 12c в словаре данных dba_users есть столбец, который помогает удалить системные таблицы из набора результатов. Полный запрос будет: SELECT owner, table_name from dba_tables, where owner not in (выберите имя пользователя из dba_users, где oracle_mainhibited = 'Y')
Как указано, у вас должен быть минимум разрешений SELECT для таблицы, чтобы увидеть ее, и это также только в том случае, если ваша учетная запись имеет доступ к ней через PUBLIC или PRIVATE синоним. ORA-00942 - возможно, самая частая ошибка, с которой вы можете столкнуться !!!
Попробуйте выбрать из user_tables, в котором перечислены таблицы, принадлежащие текущему пользователю.
Запросы user_tables и dba_tables не работали.
Это сделал:
select table_name from all_tables
@LimitedAtonement Извините, это неправильно. Представление называется user_tables, а не user_table. Если user_tables не работает для vitule, значит что-то еще не так.
Пройдя еще один шаг, есть еще одно представление, называемое 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 строк.
Попробуйте следующие представления словаря данных.
tabs
dba_tables
all_tables
user_tables
select * from dba_tables
предоставляет все таблицы всех пользователей, только если пользователь, с которым вы вошли в систему, имеет привилегии sysdba.
На самом деле это не так. SYSDBA не требуется. Вы можете получить доступ к DBA_TABLES разными способами. 1.) Прямое предоставление объекта пользователю SYS. 2.) Предоставление пользователю привилегии ВЫБРАТЬ ЛЮБОЙ СЛОВАРЬ. 3.) Предоставление роли SELECT_CATALOG_ROLE.
Простой запрос для выбора таблиц для текущего пользователя:
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;
Это должно привести к тому, что выглядит довольно приемлемо, например:

спасибо за совет по "лучшему просмотру", но разве вы не перезаписываете pagesize 30 на pagesize 1000?
select object_name from user_objects where object_type='TABLE';
----------------ИЛИ ЖЕ------------------
select * from tab;
----------------ИЛИ ЖЕ------------------
select table_name from user_tables;
Первые 2 работали у меня. Последний возвращает «ни одной строки не выбрано». Интересно, почему?
В следующем запросе перечислены только необходимые данные, тогда как другие ответы дали мне дополнительные данные, которые меня только запутали.
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. С помощью этих инструментов, помимо имен таблиц, у вас будут поля, их типы, такие объекты, как (триггеры, последовательности, домен, представления ...)
Ниже приведены шаги, которые необходимо выполнить для создания определения ваших таблиц:
Ваша база данных будет отображаться в программе в виде диаграммы отношений сущностей.
select * from all_all_tables
это дополнительное «все» в начале дает дополнительные 3 столбца:
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
То же, что и этот ответ, не так ли?
Чтобы получить все имена таблиц, мы можем использовать:
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;
Показать таблицы, доступные текущему пользователю
Таблицы в текущем пользователе - схема входа в систему
select * from tabs;
SHOW TABLES(как в MySQL) работает?