web-dev-qa-db-ja.com

DESCRIBEコマンドを使用せずにOracleでテーブルを記述するにはどうすればよいですか?

私が取っているクラスで苦労しています。 DESCRIBEコマンドのように動作するOracleスクリプトを作成する必要があります。使用している本では、データディクショナリの使用方法が非常に不十分です。答えを探しているのではなく、正しい方向を示しています。

29
patricksweeney

探しているのは USER_TAB_COLUMNS -すべての列と、クエリが実行されるスキーマ内のそれらの説明-または ALL_TAB_COLUMNS -ユーザーが表示する権限を持つすべてのテーブルを除いて同じです。

典型的なクエリは次のとおりです。

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

column_idは、テーブル内の列の「順序」です。

大文字と小文字を区別してテーブルを追加しない限り(悪い考え)、= "MyTable"のようなものを使用する必要がある場合を除き、 'MY_TABLE'が大文字であることを確認してください。

特に、descは、優れたOracleリソースである ss64 から盗んだ次のものと同等です。

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権限を付与する必要があります。

39
Ben

テーブルを再作成するために使用できるコマンド全体を取得することもできます。

select dbms_metadata.get_ddl('TABLE','<my table name>','<table owner>') from dual;
14
Pop

Oracleには、データベース構造に関するメタデータを含むセットテーブルがあります。テーブルのテーブルがあります。ビューの表。列のテーブル。 USER_TABLES(スキーマ内のテーブル)、ALL_TABLES(表示する権限があるテーブル)、DBA_TABLES(特権がある場合はすべてのテーブル)などのビューを使用して、これらのテーブルをクエリできます。より一般的には、多くのデータベースベンダーは、ベンダー間でメタデータの一貫したビューを提供する「情報スキーマ」をサポートしています。ここで「ALL_TABLES」を検索し、利用可能な他のすべての情報を確認してください http://docs.Oracle.com/cd/B28359_01/server.111/b28320/toc.htm

1
Glenn

Oracle SQLcl で新たに導入されたのは、informationコマンドまたは単に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

1
Kaushik Nayak