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

4.17 SET DESCRIPTOR文(DESCRIPTOR設定文)

機能

SQL記述子域に情報を設定します。

記述形式

構文の構成

参照項番

一般規則

記述子名
  • SQL記述子域の名前を指定します。記述子名は、文字列定数または埋込み変数で指定します。SQLDA構造体変数の変数名は指定できません。

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

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

SQLVAR設定番号
  • 設定する項目記述子域の番号を指定します。SQLVAR設定番号は、1からALLOCATE DESCRIPTOR文で指定した実現値の値の範囲内であることが必要です。

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

SQLVAR設定情報
  • SQLVAR設定情報は、DESCRIPTOR設定文で設定する情報です。

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

    • DATAまたはINDICATOR以外の値を設定する場合、DATAの値は未定義になります。DATAの値が1つのDESCRIPTOR設定文の中で設定する複数の値のうちの1つである場合、DATAの値は最後に代入されます。

      設定識別子

      設定する内容

      データ型

      TYPE

      データ型のコード

      2進の精度を持つ真数

      LENGTH

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

      • データ長(BLOB型、ROW_IDの場合)

      • 無視(真数型または概数型の場合)
        (注1)

      2進の精度を持つ真数

      OCTET_LENGTH

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

      • 無視(真数型または概数型の場合)
        (注1)

      2進の精度を持つ真数

      PRECISION

      • 精度(真数型・概数型)

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

      2進の精度を持つ真数

      SCALE

      • 位取り(真数型・概数型)

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

      2進の精度を持つ真数

      NULLABLE

      • 1(動的パラメタ指定に対するINDICATORの値を有効にする場合)

      • 0(動的パラメタ指定に対するINDICATORの値を無視する場合)

      2進の精度を持つ真数

      INDICATOR

      指定された項目記述子域に対応する動的パラメタ指定に対する標識変数の値

      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

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

      • 日時型の場合のデータ型のコード

      • 時間隔型の場合の時間隔修飾子のコード
        (注2)

      2進の精度を持つ真数

      DATETIME_INTERVAL_PRECISION

      時間隔先行フィールド精度

      2進の精度を持つ真数

    注1) 日時型、時間隔型は文字列で表現したデータ長

    注2) コードの値は“表4.5 SQLTYPEの値が10を示す場合のDATETIME_INTERVAL_CODEの値”を参照してください。


    データ型に対応する各々の値は、“表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)
                      :
          (DESC1の内容を取得します)
                      :
  for(VARWCOUNT = 1 ; VARWCOUNT <= VARCOUNT ; ++VARWCOUNT) {
      EXEC SQL SET DESCRIPTOR 'DESC1' VALUE :VARWCOUNT                       (5)
      DATA = :VARDATA;
  }

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

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

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

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

(5) 記述子名DESC1のSQL記述子域の項目記述子にDATAの値を設定します。