Как я могу описать таблицу в Oracle без использования команды DESCRIBE?
У меня трудное время с классом, который я беру. Нам нужно написать сценарий Oracle, который будет действовать так же, как команда DESCRIBE. Книга, которую мы используем, описывает, как работать со словарем данных очень плохо. Не ищу ответов, но точку в правильном направлении.
4 ответов
вы ищете 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
, но для каждой таблицы в база данных. Это предполагает, что у вас есть права для просмотра как его, так и таблиц. Если у вас нет доступа к этой таблице, вам нужно получить DBA, чтобы предоставить вам SELECT ANY DICTIONARY
привилегии.
вы также можете получить всю команду, которая может быть использована для воссоздания таблицы:
select dbms_metadata.get_ddl('TABLE','<my table name>','<table owner>') from dual;
Oracle имеет набор таблиц, содержащих метаданные о структуре базы данных. Есть стол из столов. Таблица взглядов. Таблица столбцов. Вы можете запросить эти таблицы, используя такие представления, как USER_TABLES (таблицы в вашей схеме), ALL_TABLES (таблицы, которые у вас есть разрешение на просмотр), DBA_TABLES (все таблицы, если у вас есть права). В более общем плане многие поставщики баз данных поддерживают "информационную схему", которая обеспечивает согласованное представление метаданных между поставщиками. Искать "ALL_TABLES" здесь и посмотрите на всю другую доступную информациюhttp://docs.oracle.com/cd/B28359_01/server.111/b28320/toc.htm
недавно введен в Oracle SQLcl - это или просто INFO table_name
.
Он имеет простой синтаксис, такой как DESC[RIBE]
:
SQL> info
INFORMATION
--------
This command is like describe but with more details about the objects requested.
INFO[RMATION] {[schema.]object[@connect_identifier]}
INFO+ will show column statistics
его выход намного превосходит и описательный по сравнению с DESCRIBE
. В нем перечислены более подробные сведения об определениях столбцов для таблицы, представления или синонима, а также спецификации функции или процедуры.
например: это выход, который я получаю в SQLcl: Выпуск 18.1.1 когда я запускаю
info employees
SQL> info employees;
TABLE: EMPLOYEES
LAST ANALYZED:2018-05-26 15:07:58.0
ROWS :107
SAMPLE SIZE :107
INMEMORY :DISABLED
COMMENTS :employees table. Contains 107 rows. References with departments,
jobs, job_history tables. Contains a self reference.
Columns
NAME DATA TYPE NULL DEFAULT COMMENTS
*EMPLOYEE_ID NUMBER(6,0) No Primary key of employees table.
FIRST_NAME VARCHAR2(20 BYTE) Yes First name of the employee. A not null column.
LAST_NAME VARCHAR2(25 BYTE) No Last name of the employee. A not null column.
EMAIL VARCHAR2(25 BYTE) No Email id of the employee
PHONE_NUMBER VARCHAR2(20 BYTE) Yes Phone number of the employee; includes country
code and area code
HIRE_DATE DATE No Date when the employee started on this job. A not
null column.
JOB_ID VARCHAR2(10 BYTE) No Current job of the employee; foreign key to job_id
column of the jobs table. A not null column.
SALARY NUMBER(8,2) Yes Monthly salary of the employee. Must be greater
than zero (enforced by constraint emp_salary_min)
COMMISSION_PCT NUMBER(2,2) Yes Commission percentage of the employee; Only
employees in sales department elgible for
commission percentage
MANAGER_ID NUMBER(6,0) Yes Manager id of the employee; has same domain as
manager_id in departments table. Foreign key to
employee_id column of employees table.(useful for
reflexive joins and CONNECT BY query)
DEPARTMENT_ID NUMBER(4,0) Yes Department id where employee works; foreign key to
department_id column of the departments table
Indexes
INDEX_NAME UNIQUENESS STATUS FUNCIDX_STATUS COLUMNS
HR.EMP_JOB_IX NONUNIQUE VALID JOB_ID
HR.EMP_NAME_IX NONUNIQUE VALID LAST_NAME, FIRST_NAME
HR.EMP_EMAIL_UK UNIQUE VALID EMAIL
HR.EMP_EMP_ID_PK UNIQUE VALID EMPLOYEE_ID
HR.EMP_MANAGER_IX NONUNIQUE VALID MANAGER_ID
HR.EMP_DEPARTMENT_IX NONUNIQUE VALID DEPARTMENT_ID
References
TABLE_NAME CONSTRAINT_NAME DELETE_RULE STATUS DEFERRABLE VALIDATED GENERATED
DEPARTMENTS DEPT_MGR_FK NO ACTION ENABLED NOT DEFERRABLE VALIDATED USER NAME
EMPLOYEES EMP_MANAGER_FK NO ACTION ENABLED NOT DEFERRABLE VALIDATED USER NAME
JOB_HISTORY JHIST_EMP_FK NO ACTION ENABLED NOT DEFERRABLE VALIDATED USER NAME
вот снимок экрана с info+
: