12.19 DESCRIBE

構文

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

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

schema

オブジェクトまたはオブジェクトを表示するアクセス権が存在するスキーマを指定します。schemaを省略した場合、そのオブジェクトがpublic synonymでない場合は、コマンド実行者自身のオブジェクトとみなされます。

object

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

@db_link

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

使用方法

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

  • それぞれの列の名前

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

  • 列のデータ型(CHAR、DATE、LONG、LONGRAW、NUMBER、RAW、ROWID、VARCHAR2(VARCHAR)、XMLTypeなど)

  • 列の精度(および、数値列の場合は位取り(ある場合))。

DESCRIBEを実行すると、VARCHAR列がVARCHAR2の型とともに戻されます。

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

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

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

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

  • 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

プロシージャaprocおよびbprocを含むパッケージAPACKを作成し、この定義を表示するには、次のように入力します。

CREATE PACKAGE apack AS
PROCEDURE aproc(P1 CHAR, P2 NUMBER);
PROCEDURE bproc(P1 CHAR, P2 NUMBER);
END apack;
/
Package created.
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

STREET属性およびCITY属性を含むオブジェクト型ADDRESSを作成し、この定義を表示するには、次のように入力します。

CREATE TYPE ADDRESS AS OBJECT
  ( STREET  VARCHAR2(20),
    CITY    VARCHAR2(20)
  );
/
Type created.
DESCRIBE address
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------
 STREET                                             VARCHAR2(20)
 CITY                                               VARCHAR2(20)

属性LAST_NAME、EMPADDR、JOB_IDおよびSALARYを含むオブジェクト型EMPLOYEEを作成し、この定義を表示するには、次のように入力します。

CREATE TYPE EMPLOYEE AS OBJECT
(LAST_NAME VARCHAR2(30),
EMPADDR ADDRESS,
JOB_ID VARCHAR2(20),
SALARY NUMBER(7,2)
);
/
Type created.
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.
DESCRIBE addr_type
 addr_type TABLE OF ADDRESS
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------
 STREET                                             VARCHAR2(20)
 CITY                                               VARCHAR2(20)

オブジェクト型addr_varrayをオブジェクト型ADDRESSのVARRAYとして作成し、この定義を表示するには、次のように入力します。

CREATE TYPE addr_varray AS VARRAY(10) OF ADDRESS;
/
Type created.
DESCRIBE addr_varray
 addr_varray VARRAY(10) OF ADDRESS
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------
 STREET                                             VARCHAR2(20)
 CITY                                               VARCHAR2(20)

DEPARTMENT_ID、PERSONおよびLOC列を含む表departmentを作成し、この定義を表示するには、次のように入力します。

CREATE TABLE department
(DEPARTMENT_ID NUMBER,
PERSON EMPLOYEE,
LOC NUMBER
);
/
Table created.
DESCRIBE department
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------
 DEPARTMENT_ID                                      NUMBER
 PERSON                                             EMPLOYEE
 LOC                                                NUMBER

属性NUMERATOR、DENOMINATORおよびMETHOD rational_orderを含むオブジェクト型rationalを作成し、この定義を表示するには、次のように入力します。

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;
/
DESCRIBE rational
Name                             Null?      Type
------------------------------   --------   ------------
NUMERATOR                                   NUMBER
DENOMINATOR                                 NUMBER

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

XMLTypeの列を含む表を作成し、この定義を表示するには、次のように入力します。

CREATE TABLE PROPERTY (Price NUMBER, Description SYS.XMLTYPE);
Table created
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)

暗号化された列col2を含む表des2_tableを作成し、定義するには、次のように入力します。

CREATE TABLE des2_table (
col1 VARCHAR2(10),
col2 VARCHAR2(15) ENCRYPT,
col3 CHAR(5),
col4 CHAR(20));
Table created
DESCRIBE des2_table;
Name                                       Null?     Type
-----------------------------------------  --------  ----------------------
COL1                                                 VARCHAR2(10)
COL2                                                 VARCHAR2(15) ENCRYPT
COL3                                                 CHAR(5)
COL4                                                 CHAR(20)

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

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