Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 文 » SQL 文 (A ~ D)

 

DESCRIBE 文 [ESQL]

この文は、データベースから取り出したデータを格納するために必要なホスト変数、またはデータベースにデータを渡すために必要なホスト変数に関する情報を取得するために使用します。

構文
DESCRIBE
[ USER TYPES ]
[ ALL | BIND VARIABLES FOR | INPUT | OUTPUT
| SELECT LIST FOR ]
[ LONG NAMES [ long-name-spec ] | WITH VARIABLE RESULT ]
[ FOR ] { statement-name | CURSOR cursor-name }
INTO sqlda-name
long-name-spec :
OWNER.TABLE.COLUMN 
| TABLE.COLUMN 
| COLUMN
statement-name :  identifier または hostvar
cursor-name :  宣言されたカーソル
sqlda-name : identifier
パラメータ
  • USER TYPES 句   USER TYPES 句を持つ DESCRIBE 文は、カラムのドメインに関する情報を返します。通常、このような DESCRIBE は、以前の DESCRIBE が DT_HAS_USERTYPE_INFO のインジケータを返したときに行われます。

    返された情報は、sqlname フィールドがカラム名の代わりにドメインの名前を保持すること以外は、USER TYPES キーワードのない DESCRIBE と同じです。

    DESCRIBE が LONG NAMES 句を使用する場合は、sqldata フィールドがこの情報を保持します。

  • ALL 句   DESCRIBE ALL を使用すると、データベース・サーバへの 1 回の要求で INPUT と OUTPUT を記述できます。これにはパフォーマンス上の利点があります。OUTPUT 情報が最初に SQLDA に格納され、次に INPUT 情報が格納されます。sqld フィールドには、INPUT と OUTPUT 変数の総数が入ります。インジケータ変数内の DT_DESCRIBE_INPUT ビットは INPUT 変数に対して設定され、OUTPUT 変数に対してクリアします。

  • INPUT 句   バインド変数は、データベースが文を実行するときにアプリケーションによって提供される値です。バインド変数は、文に対するパラメータと考えることができます。DESCRIBE INPUT は、バインド変数名を使って SQLDA に名前フィールドを格納します。DESCRIBE INPUT は、SQLDA の sqlda フィールドにバインド変数の数も格納します。

    DESCRIBE は、SQLDA の中のインジケータ変数を使って情報を追加します。DT_PROCEDURE_IN と DT_PROCEDURE_OUT は、CALL 文を記述するときに、インジケータ変数の中に設定されるビットです。DT_PROCEDURE_IN は IN または INOUT パラメータを示し、DT_PROCEDURE_OUT は INOUT または OUT パラメータを示します。プロシージャ RESULT カラムは、両方のビットをクリアします。DESCRIBE OUTPUT の後、これらのビットは結果セットを持っている文 (OPEN、FETCH、RESUME、CLOSE を使用する必要がある) と持っていない文 (EXECUTE を使用する必要がある) を区別するのに使用できます。DESCRIBE INPUT は、バインド変数が CALL 文に対する引数であるときに、適切に DT_PROCEDURE_IN と DT_PROCEDURE_OUT を設定するだけです。CALL 文の引数である式の中のバインド変数は、ビットを設定しません。

  • OUTPUT 句   DESCRIBE OUTPUT 文は、SQLDA のそれぞれの select リスト項目のデータ型と長さを埋めます。名前フィールドにも、select リスト項目の名前が入ります。select リスト項目に対してエイリアスを指定する場合、名前はそのエイリアスになります。エイリアスを指定しない場合、名前を select リスト項目から取り出します。項目が単純なカラム名である場合は、その名前が使用されます。そうでない場合は、式の部分文字列が使用されます。また、DESCRIBE は、select リスト項目の数を SQLDA の sqld フィールドに格納します。

    記述されている文が 2 つ以上の SELECT 文の UNION である場合、DESCRIBE OUTPUT に対して返されるカラム名は、最初の SELECT 文に対して返されるカラム名と同じです。

    CALL 文を記述すると、DESCRIBE OUTPUT 文は、プロシージャ中の各 INOUT または OUT パラメータに対して、SQLDA の中にデータ型、長さ、名前を格納します。DESCRIBE OUTPUT 文は、SQLDA の sqld フィールドの中に INOUT または OUT パラメータの数も格納します。

    結果セットを返す CALL 文を記述すると、DESCRIBE OUTPUT 文は、プロシージャ定義の各 RESULT カラムに対して、SQLDA の中にデータ型、長さ、名前を格納します。DESCRIBE OUTPUT 文は、SQLDA の sqld フィールドの中に結果カラムの数も格納します。

  • LONG NAMES 句   LONG NAMES 句は、文またはカーソルに対応するカラム名を取得するために用意されています。この句を使用しないと、取得するカラム名の長さは 29 文字に制限されますが、この句を使用すると、任意の長さのカラム名がサポートされます。

    LONG NAMES を使用した場合、カーソルからフェッチを行う場合と同様に、長い名前は SQLDA の SQLDATA フィールドに格納されます。これ以外のフィールド (SQLLEN、SQLTYPE など) にはどれも入力されません。SQLDA は FETCH SQLDA のようにセットアップしてください。つまり、各カラムには、文字型のデータのエントリを 1 つ含めます。インジケータ変数がある場合、通常の方法でトランケーションが示されます。

    長い名前のデフォルトの仕様は、TABLE.COLUMN です。

  • WITH VARIABLE RESULT 句   この句は、複数の結果セットと異なる数または型のカラムを持つプロシージャの記述に使用します。

    WITH VARIABLE RESULT を使用する場合、DESCRIBE 文後にデータベース・サーバは SQLCOUNT 値を次のいずれかに設定します。

    • 0   結果セットは変更される場合があります。各 OPEN 文の後でプロシージャ・コールを記述し直してください。

    • 1   結果セットは固定です。再度記述する必要はありません。

      SQLDA 構造体の使用の詳細については、SQLDA (SQL descriptor area)を参照してください。

備考

DESCRIBE 文は指定した SQLDA を設定し、指定した文に対して OUTPUT (SELECT LIST と同等) または INPUT (BIND VARIABLES) を記述します。

INPUT の場合、DESCRIBE BIND VARIABLES は SQLDA の中にデータ型を設定しません。アプリケーションが、データ型を設定する必要があります。ALL キーワードを使うと、1 つの SQLDA の中に INPUT と OUTPUT を記述できます。

文名を指定する場合は、同じ文名で PREPARE 文を使用して、文を事前に作成します。また、事前に SQLDA を割り付けます (ALLOCATE DESCRIPTOR 文 [ESQL]を参照してください)。

カーソル名を指定する場合、カーソルを事前に宣言し、開いておきます。デフォルトの動作は、OUTPUT です。SELECT 文と CALL 文だけが OUTPUT を持っています。他の文または動的カーソルではないカーソルの DESCRIBE OUTPUT は、SQLDA の sqld フィールドを 0 に設定して出力なしを示します。

Embedded SQL の場合、NCHAR、NVARCHAR、LONG NVARCHAR はそれぞれデフォルトで DT_FIXCHAR、DT_VARCHAR、DT_LONGVARCHAR と記述されます。db_change_nchar_charset 関数が呼び出された場合、これらのデータ型はそれぞれ DT_NFIXCHAR、DT_NVARCHAR、DT_LONGNVARCHAR と記述されます。db_change_nchar_charset 関数を参照してください。

NCHAR データ型の記述方法については、データ型について説明されているNCHAR データ型NVARCHAR データ型LONG NVARCHAR データ型を参照してください。

パーミッション

なし

関連する動作

なし

参照
標準と互換性
  • SQL/2003   コア機能。いくつかの句はベンダ拡張です。

次の例は、DESCRIBE 構造体の使用方法を示します。

sqlda = alloc_sqlda( 3 );
EXEC SQL DESCRIBE OUTPUT
  FOR employee_statement
  INTO sqlda;
if( sqlda->sqld  >  sqlda->sqln ) {
  actual_size = sqlda->sqld;
  free_sqlda( sqlda );
  sqlda = alloc_sqlda( actual_size );
  EXEC SQL DESCRIBE OUTPUT
    FOR employee_statement
    INTO sqlda;
}