13.19 DESCRIBE

構文

DESC[RIBE] {[schema.]object[@db_link]}

指定した表、ビューまたはシノニムの列定義を表示したり、指定したファンクションまたはプロシージャの仕様を表示します。

schema

オブジェクトまたはオブジェクトを表示するアクセス権が存在するスキーマを指定します。スキーマを省略し、オブジェクトがパブリック・シノニムでない場合は、現在使用可能なスキーマが使用されます。

object

記述する表、ビュー、型、プロシージャ、ファンクション、パッケージまたはシノニムを指定します。

@db_link

objectが存在しているデータベースに対応するデータベース・リンク名です。異なるスキーマ内の別の表にアクセスする権限の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

使用方法

表、ビュー、型およびシノニムの定義の表示には、次の情報が含まれます。

  • それぞれの列の名前

  • それぞれの列についてnull値が許可されるかどうか(NULLまたはNOT NULL)。

  • 列のデータ型(CHARDATELONGLONGRAWNUMBERRAWROWIDVARCHAR2 (VARCHAR)XMLTypeBOOLEANなど)

    ノート:

    Oracle Database 23c以降、DESCRIBEコマンドでも、列に関連付けられているドメイン情報(存在する場合)が表示されます。
    
    Name                Null?   Type
    ------------------  -----   -----------------------------
    CUST_EMAIL                  VARCHAR2(100) DOMAIN EMAIL
  • 列の精度(および、数値列の場合は位取り(ある場合))

  • 表またはビューとその列の注釈情報(有効な場合)

    ノート:

    • 注釈が有効な場合、DESCRIBEコマンドは、表またはビューとその列の注釈情報を表示します。

    • 注釈が無効になっている場合、現在の動作は変更されません。表またはビューとその列に関する注釈情報は表示されません。

      を参照してください。

DESCRIBEコマンドを実行すると、VARCHAR列がVARCHAR2の型で返されます。

DESCRIBEコマンドを使用すると、SET DESCRIBEコマンドで設定した深さレベルまで、オブジェクトの定義を繰り返し記述できます。1つのオブジェクトに複数のオブジェクト型が含まれている場合は、行番号および属性や列のインデントを表示することもできます。詳細は、「SET」コマンドを参照してください。

表示されるデータの幅を制御するには、SET LINESIZE を使用します。

DESCRIBEコマンドで出力される列には、通常、現在指定されているlinesizeの割合が割り当てられます。SET LINESIZEコマンドを使用してlinesizeを増減させると、通常、各列の割合が増減します。これによって、表示で予期しないテキストの折返しが発生する場合があります。詳細は、「SET」コマンドを参照してください。

注釈情報の表示を有効または無効にするには、SET DESCRIBEコマンドを使用します。新しいSET DESCRIBEオプションを有効にすると、DESCRIBEコマンドによって表またはビューの列メタデータがその注釈とともに表示されます。詳細は、「SET」コマンドを参照してください。

DESCRIBEコマンドを使用して、BOOLEANデータ型のメタデータを取得できます。

ファンクションおよびプロシージャの定義には、次の情報が含まれます。

  • PL/SQLオブジェクトの型(ファンクションまたはプロシージャ)

  • ファンクションまたはプロシージャの名前

  • 戻される値の型(ファンクションの場合)

  • 引数名、型、入力または出力、デフォルト値(ある場合)

  • 列内のデータが暗号化されるかどうかを示すENCRYPTキーワード

次の例に示すように、EMP_DETAILS_VIEWビューを記述できます。

DESCRIBE EMP_DETAILS_VIEW

次のような出力結果が表示されます。

 Name                                Null?    Type
 ---------------------------------- -------- ----------------
 EMPLOYEE_ID                        NOT NULL NUMBER(6)
 JOB_ID                             NOT NULL VARCHAR2(10)
 MANAGER_ID                                  NUMBER(6)
 DEPARTMENT_ID                               NUMBER(4)
 LOCATION_ID                                 NUMBER(4)
 COUNTRY_ID                                  CHAR(2)
 FIRST_NAME                                  VARCHAR2(20)
 LAST_NAME                          NOT NULL VARCHAR2(25)
 SALARY                                      NUMBER(8,2)
 COMMISSION_PCT                              NUMBER(2,2)
 DEPARTMENT_NAME                    NOT NULL VARCHAR2(30)
 JOB_TITLE                          NOT NULL VARCHAR2(35)
 CITY                               NOT NULL VARCHAR2(30)
 STATE_PROVINCE                              VARCHAR2(25)
 COUNTRY_NAME                                VARCHAR2(40)
 REGION_NAME                                 VARCHAR2(25)

次の例に示すように、CUSTOMER_LOOKUPプロシージャを記述できます。

DESCRIBE customer_lookup

次のような出力結果が表示されます。

PROCEDURE customer_lookup
Argument Name           Type     In/Out   Default?
----------------------  -------- -------- ---------
CUST_ID                 NUMBER   IN
CUST_NAME               VARCHAR2 OUT

プロシージャMYPROCには、次の例に示すように、BOOLEANパラメータがあります。

CREATE PROCEDURE myproc (col1 IN CHAR, col2 IN NUMBER, col3 BOOLEAN) AS
BEGIN   
  Null;
END;
/

次の例に示すように、プロシージャMYPROCを記述できます。

DESCRIBE myproc

次のような出力結果が表示されます。

PROCEDURE myproc
Argument Name          Type     In/Out   Default?
------------------  -------- -------- ---------
COL1                 CHAR     IN
COL2                 NUMBER   IN
COL3                 BOOLEAN  IN 

パッケージAPACKには、次の例に示すように、プロシージャAPROCおよびBPROCがあります。

CREATE PACKAGE apack AS
PROCEDURE aproc(P1 CHAR, P2 NUMBER);
PROCEDURE bproc(P1 CHAR, P2 NUMBER);
END apack;
/
Package created.

次の例に示すように、パッケージAPACKを記述できます。

DESCRIBE apack

次のような出力結果が表示されます。

PROCEDURE APROC
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 P1                             CHAR                    IN
 P2                             NUMBER                  IN
PROCEDURE BPROC
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 P1                             CHAR                    IN
 P2                             NUMBER                  IN

オブジェクト型ADDRESSには、次の例に示すように、属性STREETおよびCITYがあります。

CREATE TYPE ADDRESS AS OBJECT
  ( STREET  VARCHAR2(20),
    CITY    VARCHAR2(20)
  );
/
Type created.

次の例に示すように、オブジェクト型ADDRESSを記述できます。

DESCRIBE address

次のような出力結果が表示されます。

 Name                             Null?    Type
 ------------------------------ -------- ----------------------
 STREET                                   VARCHAR2(20)
 CITY                                     VARCHAR2(20)

オブジェクト型EMPLOYEEには、次のコード・スニペットに示すように、属性LAST_NAMEEMPADDRJOB_IDおよびSALARYがあります。

CREATE TYPE EMPLOYEE AS OBJECT
(LAST_NAME VARCHAR2(30),
EMPADDR ADDRESS,
JOB_ID VARCHAR2(20),
SALARY NUMBER(7,2)
);
/
Type created.

次の例に示すように、オブジェクト型EMPLOYEEを記述できます。

DESCRIBE employee

次のような出力結果が表示されます。

 Name                              Null?    Type
 ------------------------------- -------- ---------------
 LAST_NAME                                 VARCHAR2(30)
 EMPADDR                                   ADDRESS
 JOB_ID                                    VARCHAR2(20)
 SALARY                                    NUMBER(7,2)

オブジェクト型ADDR_TYPEは、次の例に示すように、オブジェクト型ADDRESSの表です。

CREATE TYPE addr_type IS TABLE OF ADDRESS;
/
Type created.

次の例に示すように、オブジェクト型ADDR_TYPEを記述できます。

DESCRIBE addr_type

次のような出力結果が表示されます。

 addr_type TABLE OF ADDRESS
 Name                              Null?    Type
 --------------------------------- -------- ------------------
 STREET                                     VARCHAR2(20)
 CITY                                       VARCHAR2(20)

オブジェクト型ADDR_VARRAYは、次の例に示すように、オブジェクト型ADDRESSの可変長配列です。

CREATE TYPE addr_varray AS VARRAY(10) OF ADDRESS;
/
Type created.

次の例に示すように、オブジェクト型ADDR_VARRAYを記述できます。

DESCRIBE addr_varray

次のような出力結果が表示されます。

 addr_varray VARRAY(10) OF ADDRESS
 Name                               Null?    Type
 ---------------------------------- -------- -----------------
 STREET                                      VARCHAR2(20)
 CITY                                        VARCHAR2(20)

DEPARTMENTには、次の例に示すように、DEPARTMENT_IDPERSONおよびLOC列があります。

CREATE TABLE department
(DEPARTMENT_ID NUMBER,
PERSON EMPLOYEE,
LOC NUMBER
);
/
Table created.

次の例に示すように、表DEPARTMENTを記述できます。

DESCRIBE department

次のような出力結果が表示されます。

 Name                                    Null?    Type
 ------------------------------------- -------- --------------------
 DEPARTMENT_ID                                   NUMBER
 PERSON                                          EMPLOYEE
 LOC                                             NUMBER

オブジェクト型RATIONALには、次のコード・スニペットに示すように、属性NUMERATORおよびDENOMINATORとメソッドRATIONAL_ORDERがあります。

CREATE OR REPLACE TYPE rational AS OBJECT
(NUMERATOR NUMBER,
DENOMINATOR NUMBER,
MAP MEMBER FUNCTION rational_order - 
RETURN DOUBLE PRECISION,
PRAGMA RESTRICT_REFERENCES
(rational_order, RNDS, WNDS, RNPS, WNPS) );
/
CREATE OR REPLACE TYPE BODY rational AS OBJECT
MAP MEMBER FUNCTION rational_order - 
RETURN DOUBLE PRECISION IS 
BEGIN
  RETURN NUMERATOR/DENOMINATOR;
END;
END;
/

次の例に示すように、オブジェクト型RATIONALを記述できます。

DESCRIBE rational

次のような出力結果が表示されます。

Name                              Null?      Type
------------------------------   --------   ------------
NUMERATOR                                   NUMBER
DENOMINATOR                                 NUMBER

METHOD
------
MAP MEMBER FUNCTION RATIONAL_ORDER RETURNS NUMBER

PROPERTYには、次の例に示すように、XMLType列があります。

CREATE TABLE PROPERTY (Price NUMBER, Description SYS.XMLTYPE);
Table created.

次の例に示すように、表PROPERTYを記述できます。

DESCRIBE property

次のような出力結果が表示されます。

Name                                     Null?     Type
---------------------------------------  --------  ------------------
PRICE                                               NUMBER
DESCRIPTION                                         SYS.XMLTYPE  

SETコマンドを使用して、DESCRIBEコマンドの出力を、次の例に示すように書式設定できます。

SET LINESIZE 80
SET DESCRIBE DEPTH 2
SET DESCRIBE INDENT ON
SET DESCRIBE LINE OFF

SHOWコマンドを使用して、次の例に示すようにオブジェクトの設定を表示できます。

SHOW DESCRIBE
DESCRIBE DEPTH 2 LINENUM OFF INDENT ON
DESCRIBE employee

次のような出力結果が表示されます。

 Name                                   Null?    Type
 ------------------------------------- -------- ----------------
 FIRST_NAME                                      VARCHAR2(30)
 EMPADDR                                         ADDRESS
 STREET                                          VARCHAR2(20)
 CITY                                            VARCHAR2(20)
 JOB_ID                                          VARCHAR2(20)
 SALARY                                          NUMBER(7,2)

ENC_TABLEには、次の例に示すように、暗号化された列COL2があります。

CREATE TABLE enc_table (
col1 VARCHAR2(10),
col2 VARCHAR2(15) ENCRYPT,
col3 CHAR(5),
col4 CHAR(20));
Table created.

次の例に示すように、表ENC_TABLEを記述できます。

DESCRIBE enc_table

次のような出力結果が表示されます。

Name                                    Null?     Type
-------------------------------------  --------  --------------------
COL1                                                 VARCHAR2(10)
COL2                                                 VARCHAR2(15) ENCRYPT
COL3                                                 CHAR(5)
COL4                                                 CHAR(20)

CUSTOMERSには、次の例に示すように、表の列に定義された電子メール・ドメインがあります。

CREATE DOMAIN Email AS VARCHAR2(30)
DEFAULT ON NULL t_seq.NEXTVAL||'@gmail.com'
CONSTRAINT EMAIL_C CHECK(REGEXP_LIKE (Email, '^(\S+)\@(\S+)\.(\S+)$')) 
                         DISPLAY '---' || SUBSTR(Email, INSTR(Email, '@') + 1);
CREATE TABLE customers (Cust_id NUMBER, Cust_email VARCHAR2(100) DOMAIN Email);

次の例に示すように、表CUSTOMERSを記述できます。

DESCRIBE customers

次のような出力結果が表示されます。


Name                     Null?   Type
----------------------  -----   -------------------------------------
CUST_ID                             NUMBER
CUST_EMAIL                          VARCHAR2(100) DOMAIN EMAIL

ドメイン名がTYPE列に収まらない場合は、列に収まるように自動的に折り返されます。

Name                              Null? Type
-------------------------------  ------- ----------------------------
CUST_ID                                  NUMBER
CUST_EMAIL                               VARCHAR2(100) DOMAIN
                                         EMAIL

ANNOTATION_TABには、次の例に示すように、列注釈があります。

CREATE TABLE annotation_tab
  (c1 NUMBER ANNOTATIONS(EmpGroup2 'Emp_Info', Hidden),
   c2 NUMBER primary key);

SET DESCRIBEコマンドを使用して、列の注釈情報の表示を有効にできます。

SET DESCRIBE ANNOTATION ON

次の例に示すように、表ANNOTATION_TABを記述できます。

DESCRIBE annotation_tab

次のような出力結果が表示されます。


Name          Null?    Type       Annotation
-----------  -------   --------- ---------------------------------------
C1                     NUMBER     EmpGroup2 Emp_Info 
                                  Hidden:
C2                     NUMBER

CREATE TYPEコマンドの使用方法の詳細は、Oracle Database SQL言語リファレンスを参照してください。

SET DESCRIBEコマンドおよびSHOW DESCRIBEコマンドの使用方法の詳細は、SETコマンドおよびSHOWコマンドを参照してください。