Как я могу описать таблицу в 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+:

enter image description here