Как запросить базу данных Oracle, чтобы отобразить имена всех таблиц в ней?
Как запросить базу данных Oracle, чтобы отобразить имена всех таблиц в ней?
Ответы:
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 также имеет ряд устаревших данных словаря views-- TAB
, DICT
, TABS
и CAT
для example-- , которые можно было бы использовать. В целом, я бы не советовал использовать эти устаревшие представления, если вам абсолютно не нужно перенести свои сценарии в Oracle 6. Oracle не изменяла эти представления в течение длительного времени, поэтому у них часто возникают проблемы с объектами более новых типов. Например, TAB
и CAT
представления, и представления показывают информацию о таблицах, которые находятся в корзине пользователя, в то время как [DBA|ALL|USER]_TABLES
все представления отфильтровывают их. CAT
также показывает информацию о материализованных журналах представлений с TABLE_TYPE
«TABLE», что вряд ли будет тем, что вы действительно хотите. DICT
объединяет таблицы и синонимы и не говорит вам, кто владеет объектом.
Запрашивала user_tables
и dba_tables
не работала.
Этот сделал:
select table_name from all_tables
Если пойти еще дальше, есть еще одно представление с именем 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 строк.
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 table_name FROM user_tables;
Попробуйте следующие представления словаря данных.
tabs
dba_tables
all_tables
user_tables
Попробуйте выбрать из user_tables, в которой перечислены таблицы, принадлежащие текущему пользователю.
База данных Oracle для отображения имен всех таблиц, используя запрос ниже
ВЫБЕРИТЕ владельца, table_name FROM dba_tables; ВЫБЕРИТЕ владельца, table_name FROM all_tables; ВЫБЕРИТЕ table_name FROM user_tables;
более подробно: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html
select * from dba_tables
выдает все таблицы всех пользователей, только если пользователь, с которым вы вошли в систему, имеет sysdba
привилегии.
Я не нашел ответа, который указывал бы на использование
DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
поэтому решил добавить и мою версию. Это представление фактически возвращает больше, чем DBA_TABLES, так как оно также возвращает таблицы объектов ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ).
Вы можете использовать Oracle Data Dictionary для получения информации об объектах оракула.
Вы можете получить список таблиц разными способами:
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
если вы хотите.
Мы можем получить все таблицы, включая детали столбцов, из запроса ниже:
SELECT * FROM user_tab_columns;
Ниже приведен закомментированный фрагмент 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;
Новая функция, доступная в 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.
Джефф Смит объясняет больше об псевдонимах здесь
Я искал список всех имен столбцов, принадлежащих таблице схемы, отсортированный по порядку идентификатора столбца.
Вот запрос, который я использую: -
SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;
Действительно, список таблиц можно получить с помощью запросов SQL. Это можно сделать также с помощью инструментов, которые позволяют создавать словари данных, такие как ERWIN , Toad Data Modeler или ERBuilder. . С этими инструментами, в дополнение к именам таблиц, у вас будут поля, их типы, объекты (триггеры, последовательности, домен, представления ...)
Ниже приведены шаги, которые необходимо выполнить для создания определения таблиц:
Ваша база данных будет отображаться в программном обеспечении в виде диаграммы отношений сущностей.
select * from all_all_tables
это дополнительное «все» в начале дает дополнительные 3 столбца, которые:
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
SHOW TABLES
(как в MySQL)?