ページの先頭行へ戻る
Symfoware Server V11.0.x SQLリファレンス
Symfoware

4.14 GET DESCRIPTOR文(DESCRIPTOR取得文)

機能

SQL記述子域から情報を取得します。

記述形式

構文の構成

参照項番

一般規則

記述子名
  • SQL記述子域の名前を指定します。SQLDA構造体変数の変数名は指定できません。

  • 記述子名は文字列定数または文字列型の埋込み変数で指定します。

COUNT
  • COUNTを指定した場合は、単純相手指定には、項目記述子域に設定された動的パラメタ指定、または相手指定の個数が設定されます。

  • COUNTを指定した場合の単純相手指定のデータ型は2進の精度を持つ真数であることが必要です。

SQLVAR取得番号
  • 取得する項目記述子域の番号を指定します。

  • SQLVAR取得番号のデータ型は、2進の精度を持つ真数であることが必要です。

  • SQLVAR取得番号は、1からCOUNTの値の範囲内であることが必要です。

SQLVAR取得情報
  • SQLVAR取得情報は、DESCRIPTOR取得文で取得する情報です。

  • 取得識別子には、SQLVAR取得番号で指定された、項目記述子域の内容を取得します。取得される内容および一般規則を以下に示します。

    • INDICATORの値が負の場合は、INDICATORを取得せずにDATAの値を取得することはできません。

    • 相手指定に対するDATAの値を取得するには、同一の記述子名のUSING記述子が指定された動的FETCH文またはEXECUTE文が実行されていることが必要です。

      取得識別子

      取得する内容

      データ型

      TYPE

      データ型のコード

      2進の精度を持つ真数

      LENGTH

      • 文字列の最大文字長(文字列型または各国語文字列型の場合)(注1)

      • データ長(真数型、概数型、日時型、時間隔型、ROW_IDまたはBLOB型の場合)
        (注2)

      2進の精度を持つ真数

      OCTET_LENGTH

      • 文字列の最大バイト数(文字列型または各国語文字列型の場合)(注1)

      • データ長(真数型、概数型、日時型、時間隔型、ROW_IDまたはBLOB型の場合)
        (注2)

      2進の精度を持つ真数

      PRECISION

      • 精度(真数型または概数型の場合)

      • 0 (真数型でも概数型でもない場合)

      2進の精度を持つ真数

      SCALE

      • 位取り(真数型または概数型の場合)

      • 0 (真数型でも概数型でもない場合)

      2進の精度を持つ真数

      NULLABLE

      • 1(NULL値を許す場合)

      • 0(NULL値を許さない場合)

      2進の精度を持つ真数

      INDICATOR

      指定された項目記述子域に対応する動的パラメタ指定または相手指定に対する標識変数の値(注3)

      2進の精度を持つ真数

      DATA

      • 指定された項目記述子域に対応する動的パラメタ指定または相手指定の値

      • INDICATOR の値が負の場合、DATAの値はNULL値となる

      TYPE, LENGTH, OCTET_LENGTH, PRECISION, SCALE, CHARACTER_SET_NAME, DATETIME_INTERVAL_CODEで指定されるデータ型に一致

      NAME

      動的パラメタ指定または相手指定に対応する列名

      長さ38バイト以上の文字列型

      CHARACTER_SET_NAME

      • BASIC(文字列型)

      • NCHAR(各国語文字列型)

      • 空白(文字列型でも各国語文字列型でもない場合)

      長さ38バイト以上の文字列型

      DATETIME_INTERVAL_CODE

      • TYPEの値が9の場合のデータ型のコード

      • TYPEの値が10の場合の時間隔修飾子のコード

      2進の精度を持つ真数

      DATETIME_INTERVAL_PRECISION

      • 0 (時間隔型でない場合)

      • 時間隔先行フィールド精度 (時間隔型の場合)

      2進の精度を持つ真数

    注1) 取得した値が32,000を超える場合は、LENGTHまたはOCTET_LENGTHには、32,000が設定されます。

    注2) 日時型、時間隔型は文字列で表現したデータ長が設定されます。

    注3) 取得した値が32,000を超える場合は、0または32,000が設定されます。この場合、コード変換が発生しない環境で動作させてください。


    データ型に対応する各々の値は、“表4.7 SQLのデータ型とSQL記述子域の値の対応”を参照してください。


使用例

SQL文識別子CMDに対応する被準備文の動的パラメタ指定の情報を取得します。なお、可変長文字型の展開規則は、“6.3 SQL埋込みCプログラム”を参照してください。

  EXEC SQL BEGIN DECLARE SECTION;
      VARCHAR CMDAREA[100];
  EXEC SQL END DECLARE SECTION;
                  :
  EXEC SQL ALLOCATE DESCRIPTOR 'DESC1' WITH MAX 50;                          (1)
  strcpy(CMDAREA.sqlvar,"DELETE FROM S1.TBL WHERE COL1 = ? AND COL2 = ?");   (2)
  CMDAREA.sqllen = strlen(CMDAREA.sqlvar);
  EXEC SQL PREPARE CMD FROM :CMDAREA;                                        (3)
  EXEC SQL DESCRIBE INPUT CMD USING SQL DESCRIPTOR 'DESC1';                  (4)
  EXEC SQL GET DESCRIPTOR 'DESC1':VARCOUNT = COUNT;                          (5)
  for(VARWCOUNT = 1 ; VARWCOUNT <= VARCOUNT ; ++VARWCOUNT) {
      EXEC SQL GET DESCRIPTOR 'DESC1' VALUE :VARWCOUNT                       (6)
        :VARTYPE = TYPE,:VARLENG = LENGTH,:VAROCTET = OCTET_LENGTH,
        :VARPREC = PRECISION,:VARSCALE = SCALE,:VARNULL = NULLABLE,
        :VARNAME = NAME,:VARCHAR = CHARACTER_SET_NAME;
  }

(1) 記述子名DESC1のSQL記述子域を割り当てます。

(2) ホスト変数CMDAREAにDELETE文:探索を設定します。

(3) ホスト変数CMDAREAが示すSQL文をSQL文識別子CMDに対応づけます。

(4) SQL文識別子CMDに対応する被準備文の動的パラメタ指定の情報を記述子名DESC1のSQL記述子域に取り込みます。

(5) 記述子名DESC1のSQL記述子域からCOUNTの値を取得します。

(6) 記述子名DESC1のSQL記述子域の項目記述子域からTYPE、LENGTH、OCTET_LENGTH、PRECISION、SCALE、NULLABLE、NAME、CHARACTER_SET_NAMEの値を取得します。