Oracle получить список полей таблицы

Обновлено: 04.07.2024

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

Если вы работали с MySQL, возможно, вы знакомы с командой SHOW TABLES, которая выводит список всех таблиц в базе данных:

К сожалению, Oracle не поддерживает напрямую команду SHOW TABLES. Однако вы можете получить список всех таблиц в базе данных, выполнив запрос из различных представлений словаря данных.

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

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

Обратите внимание, что в этом представлении не отображается столбец ВЛАДЕЛЕЦ. Кроме того, таблица user_tables не содержит других таблиц, доступных текущему пользователю.

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

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

Если вы хотите отобразить все таблицы определенного владельца, добавьте столбец OWNER в предложение WHERE, как показано в следующем запросе:

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

Чтобы отобразить все таблицы во всей базе данных Oracle, выполните запрос из представления dba_tables следующим образом:

Вы получите следующее сообщение об ошибке, если у вас нет доступа к представлению dba_tables:

В этом случае вам следует попросить администратора базы данных предоставить вашей учетной записи либо привилегии для представления dba_tables, либо привилегию SELECT ANY DICTIONARY, либо привилегию SELECT_CATALOG_ROLE.

На следующем рисунке показаны таблицы, которые могут быть возвращены из представлений user_tables , all_tables и dba_tables:

oracle show table

В этом руководстве вы узнали, как отображать таблицы в базе данных Oracle, выполняя запросы из представлений словаря данных, включая user_tables , all_tables и dba_tables .

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

Что такое словари данных Oracle?

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

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

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

На самом базовом уровне вам может понадобиться просмотреть список всех таблиц, принадлежащих текущему пользователю Oracle. Это можно сделать с помощью простого запроса SELECT к словарю данных USER_TABLES.

После подключения к Oracle выполните следующее заявление:

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

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

В ситуации, когда вас интересует только то, к каким таблицам имеет доступ текущий пользователь Oracle, независимо от владельца, вместо этого вы будете использовать словарь данных ALL_TABLES.

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

Просмотр всех таблиц

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

Важно отметить, что для этого окончательного словаря DBA_TABLES могут потребоваться привилегии пользователя, превышающие те, которые есть у текущего пользователя. При необходимости вам может потребоваться предоставить привилегию SELECT ANY DICTIONARY или роль SELECT_CATALOG_ROLE. Дополнительную информацию о предоставлении этих привилегий можно найти в официальной документации.

ALL_TAB_COLUMNS описывает столбцы таблиц, представлений и кластеров, доступных текущему пользователю. Чтобы собрать статистику для этого представления, используйте инструкцию ANALYZE SQL или пакет DBMS_STATS.

DBA_TAB_COLUMNS описывает столбцы всех таблиц, представлений и кластеров в базе данных.

USER_TAB_COLUMNS описывает столбцы таблиц, представлений и кластеров, принадлежащих текущему пользователю. В этом представлении не отображается столбец ВЛАДЕЛЕЦ.

< td headers="r1c1-t154">DATA_DEFAULT
Столбец Тип данных NULL Описание
ВЛАДЕЛЕЦ VARCHAR2(30) NOT NULL Владелец таблицы, представления или кластера
ИМЯ_ТАБЛИЦЫ VARCHAR2(30) НЕ NULL Имя таблицы, представления или кластера
COLUMN_NAME VARCHAR2(30) NOT NULL Имя столбца
ТИП_ДАННЫХ VARCHAR2(106) Тип данных столбца
DATA_TYPE_MOD VARCHAR2(3) Модификатор типа данных столбца
DATA_TYPE_OWNER VARCHAR2(30) Владелец типа данных столбца
DATA_LENGTH ЧИСЛО НЕ NULL Длина столбца (в байтах)
DATA_PRECISION ЧИСЛО Десятичная точность для типа данных NUMBER; двоичная точность для типа данных FLOAT, null для всех остальных типов данных
DATA_SCALE ЧИСЛО Цифры справа от десятичной точки в числе
NULLABLE< /td> VARCHAR2(1) Указывает, допускает ли столбец значения NULL. Значение равно N, если для столбца существует ограничение NOT NULL или если столбец является частью PRIMARY KEY. Ограничение должно находиться в состоянии ENABLE VALIDATE.
COLUMN_ID NUMBER Порядковый номер созданного столбца
DEFAULT_LENGTH ЧИСЛО Длина значения по умолчанию для столбца
LONG Значение по умолчанию для столбца
NUM_DISTINCT ЧИСЛО Количество различных значений в столбце Foot 1
LOW_VALUE RAW(32) Низкое значение в столбце Footref 1
HIGH_VALUE RAW(32) Высокое значение в столбце Footref 1
ПЛОТНОСТЬ ЧИСЛО Плотность столбца Footref 1
NUM_NULLS NUMBER Количество пустых значений в столбце
NUM_BUCKETS ЧИСЛО Количество сегментов в гистограмме для столбца

Примечание. Количество сегментов в гистограмме указывается в параметре SIZE инструкции SQL ANALYZE. Однако база данных Oracle не создает гистограмму с количеством сегментов, превышающим количество строк в выборке. Кроме того, если образец содержит очень повторяющиеся значения, база данных Oracle создает указанное количество сегментов, но значение, указанное в этом столбце, может быть меньше из-за внутреннего алгоритма сжатия.

Я постоянно работаю с очень большими корпоративными базами данных Oracle. Постоянно я обнаруживаю, что пытаюсь просеять схемы в базе данных, чтобы найти отношения между таблицами. Когда таблицы названы неправильно, а их у вас много, это может быть долгим и болезненным процессом, если вы делаете это вручную.

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

В выбранном вами инструменте SQL введите следующую команду:

Если у вас есть права администратора базы данных, вы можете попробовать эту команду:

Теперь, если вы похожи на меня, вы можете даже не знать, как на самом деле называется столбец, который вы ищете. Можно только надеяться, что имя похоже, поэтому вы можете использовать предложение like и добавить несколько подстановочных знаков.

При описании структуры представления all_tab_columns получается следующее:

< td>num_buckets< td>null< /tr>
Имя столбцаДопускается пустое значениеТип данных
владелецне нульvarchar2(30)
table_nameне нульvarchar2(30)
имя_столбцане нульvarchar2(30)
data_typenullvarchar2(106)
data_type_mod nullvarchar2(3)
data_type_ownernullvarchar(120)
data_lengthне нульчисло
data_precision nullчисло
data_scalenullчисло
nullablenullvarchar2(1)
column_idnullчисло
default_lengthnullчисло
data_defaultnulllong()
num_distinctnullчисло
low_valuenullraw(32)
high_valuenullraw(32)
плотностьnull< /td>число
num_nullsnullчисло
nullчисло
last_analyzednullдата
sample_sizenullчисло
character_set_name nullvarchar2(44)
char_col_decl_lengthnullчисло
global_statsnullvarchar2(3)
user_statsvarchar2(3)
avg_col_lennullчисло
char_lengthnullчисло
char_usednull< /td>varchar2(1)
v80_fmt_imagnullvarchar2(3)
data_upgradednullvarchar2(3)
гистограмма нольvarchar2(15)

Поля column_name, table_name и owner — это единственные поля, которые я использую, но вы можете найти и другие полезные. Если вы хотите искать таблицы в определенной схеме на основе информации о столбцах, вы должны установить владельца на имя вашей схемы в предложении where.

Nic Raboy

Ник Рабой

Ник Рабой – сторонник современных веб-технологий и технологий разработки мобильных приложений. У него есть опыт работы с Java, JavaScript, Golang и различными фреймворками, такими как Angular, NativeScript и Apache Cordova. Ник пишет о своем опыте разработки, связанного с упрощением понимания веб-разработки и разработки для мобильных устройств.

Читайте также: