Мне тяжело заниматься классом, который я принимаю. Нам нужно написать Oracle script, который будет действовать так же, как команда DESCRIBE. Книга, которую мы используем, описывает, как работать с Словарем данных очень плохо. Не ища ответов, но точка в правильном направлении.
Как я могу описать таблицу в Oracle без использования команды DESCRIBE?
Ответ 1
Вы ищете USER_TAB_COLUMNS
- все столбцы и их описания в схеме, в которой выполняется запрос, - или ALL_TAB_COLUMNS
- то же самое, за исключением всех таблиц, которые пользователь имеет разрешение на просмотр.
Типичный запрос может быть:
select *
from user_tab_columns
where table_name = 'MY_TABLE'
order by column_id
column_id
- это "порядок" столбца в таблице.
Вы должны убедиться, что "MY_TABLE" имеет заглавные буквы, если вы не добавляли таблицы с корпусом (плохая идея), и в этом случае вам нужно использовать что-то вроде = "MyTable"
.
В частности desc
эквивалентно следующему, который я украл из ss64, хорошего ресурса Oracle:
select column_name as "Name"
, nullable as "Null?"
, concat(concat(concat(data_type,'('),data_length),')') as "Type"
from user_tab_columns
where table_name = 'MY_TABLE';
Этот вид просмотра можно найти на select * from dictionary
, который является верхним уровнем словаря данных или просмотрев документация.
Существует также DBA_TAB_COLUMNS
, который совпадает с ALL_TAB_COLUMNS
, но для каждой таблицы в базе данных. Это предполагает, что у вас есть привилегии для просмотра и его, и таблиц. Если у вас нет доступа к этой таблице, вам необходимо предоставить администратору базы данных предоставить вам привилегию SELECT ANY DICTIONARY
.
Ответ 2
Вы также можете получить всю команду, которая может использоваться для воссоздания таблицы:
select dbms_metadata.get_ddl('TABLE','<my table name>','<table owner>') from dual;
Ответ 3
Oracle имеет набор таблиц, содержащих метаданные о структуре базы данных. Существует таблица таблиц. Таблица представлений. Таблица столбцов. Вы можете запросить эти таблицы с помощью таких представлений, как USER_TABLES (таблицы в вашей схеме), ALL_TABLES (таблицы, для которых у вас есть разрешение на просмотр), DBA_TABLES (все таблицы, если у вас есть привилегии). В более общем плане многие поставщики баз данных поддерживают "информационную схему", которая обеспечивает согласованное представление метаданных между поставщиками. Найдите "ALL_TABLES" здесь и посмотрите на всю имеющуюся информацию http://docs.oracle.com/cd/B28359_01/server.111/b28320/toc.htm