Oracle получить список полей таблицы
Обновлено: 21.11.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, выполняя запросы из представлений словаря данных, включая 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 описывает столбцы таблиц, представлений и кластеров, принадлежащих текущему пользователю. В этом представлении не отображается столбец ВЛАДЕЛЕЦ.
Столбец | Тип данных | NULL | Описание |
---|---|---|---|
ВЛАДЕЛЕЦ | VARCHAR2(30) td> | 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 | ЧИСЛО td> | Десятичная точность для типа данных 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 получается следующее:
Имя столбца | Допускается пустое значение | Тип данных |
---|---|---|
владелец | не нуль | varchar2(30) |
table_name | не нуль td> | varchar2(30) |
имя_столбца | не нуль | varchar2(30) | tr>
data_type | null | varchar2(106) |
data_type_mod | null | varchar2(3) |
data_type_owner | null | varchar(120) |
data_length | не нуль | число |
data_precision | null | число |
data_scale | null | число |
nullable | null | varchar2(1) |
column_id | null | число |
default_length | null | число |
data_default | null | long() |
num_distinct | null | число |
low_value | null | raw(32) |
high_value | null | raw(32) |
плотность | null< /td> | число |
num_nulls | null | число |
null | число | |
last_analyzed | null | дата |
sample_size | null | число |
character_set_name | null | varchar2(44) |
char_col_decl_length | null | число |
global_stats | null | varchar2(3) |
user_stats | < td>nullvarchar2(3) | |
avg_col_len | null | число | < /tr>
char_length | null | число |
char_used | null< /td> | varchar2(1) |
v80_fmt_imag | null | varchar2(3) | tr>
data_upgraded | null | varchar2(3) |
гистограмма | ноль | varchar2(15) |
Поля column_name, table_name и owner — это единственные поля, которые я использую, но вы можете найти и другие полезные. Если вы хотите искать таблицы в определенной схеме на основе информации о столбцах, вы должны установить владельца на имя вашей схемы в предложении where.
Ник Рабой
Ник Рабой – сторонник современных веб-технологий и технологий разработки мобильных приложений. У него есть опыт работы с Java, JavaScript, Golang и различными фреймворками, такими как Angular, NativeScript и Apache Cordova. Ник пишет о своем опыте разработки, связанного с упрощением понимания веб-разработки и разработки для мобильных устройств.
Читайте также: