How can I describe a table in Oracle without using the DESCRIBE command?

前端 未结 4 1988
我寻月下人不归
我寻月下人不归 2020-11-29 04:16

I\'m having a hard time with a class I am taking. We need to write an Oracle script that will act just like the DESCRIBE command. The book we are using describes how to work

相关标签:
4条回答
  • 2020-11-29 04:53

    You're looking for USER_TAB_COLUMNS - all the columns, and their descriptions in the schema the query is executed in - or ALL_TAB_COLUMNS - the same except for all tables that user has permission to view.

    A typical query might be:

    select *
      from user_tab_columns
     where table_name = 'MY_TABLE'
     order by column_id
    

    column_id is the "order" of the column in the table.

    You should ensure that 'MY_TABLE' is capitalised unless you've been adding tables with casing ( a bad idea ) in which case you need to use something like = "MyTable".

    Specifically desc is equivalent to the following which I stole from ss64, a good Oracle resource:

    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';
    

    You can find all of this sort of view by select * from dictionary, which is the top level of the data dictionary or by looking at the documentation.

    There is also the DBA_TAB_COLUMNS, which is the same as ALL_TAB_COLUMNS, but for every table in the database. This assumes that you have the privileges to view both it and the tables. If you do not have access to this table you need to get your DBA to grant you the SELECT ANY DICTIONARY privilege.

    0 讨论(0)
  • 2020-11-29 04:54

    Newly introduced in Oracle SQLcl is the information command or simply INFO table_name. It has a simple syntax like 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
    

    Its output is far superior and descriptive compared to DESCRIBE. It Lists more detailed information about the column definitions for a table, view or synonym, or the specifications for a function or procedure.

    For eg: This is the output I get in SQLcl: Release 18.1.1 when I run

    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   
    

    Here is a screen shot with info+:

    0 讨论(0)
  • 2020-11-29 05:07

    Oracle has a set tables containing meta data about the database structure. There is a table of tables. A table of views. A table of columns. You can query these tables by using views such as USER_TABLES (tables in your schema), ALL_TABLES (tables you have permission to view), DBA_TABLES (all tables, if you have the privileges). More generically, many database vendors support the "information schema" which provides a consistent view of the meta data across vendors. Search for "ALL_TABLES" here and look at all the other information available http://docs.oracle.com/cd/B28359_01/server.111/b28320/toc.htm

    0 讨论(0)
  • 2020-11-29 05:14

    You can also retrieve the entire command that can be used to recreate the table:

    select dbms_metadata.get_ddl('TABLE','<my table name>','<table owner>') from dual;
    
    0 讨论(0)
提交回复
热议问题