付録B.1 SQL記述領域の構成と内容
UAP実行時に動的に決定した入出力変数の情報を記述する領域の構成,及び内容について説明します。
- 〈この項の構成〉
(1) SQL記述領域の構成
SQL記述領域の構成を次の図に示します。
- 注1
-
( )内は,領域の長さ(単位:バイト)を示します。
- 注2
-
nはSQLNに指定したSQLVARの数を示します。
- 注3
-
( )の[ ]内の値は,64ビットモードの場合の長さです。64ビットモードのWindowsの場合,SQLDAは16+24nバイトとなります。
- 注4
-
64ビットモードでのSQLDABCの長さは,プラットフォームごとのlong型のサイズになります。
- 注※
-
BLOB型,及びBINARY型のデータを使用する場合,領域名はSQLVAR_LOBとなり,SQLDIM(1),SQLCOD(1),SQLXDIM(2),SQLLOBLEN(4),SQLDATA(4 [8]),SQLLOBIND(4 [8])から構成されます。
SQLVAR_LOB領域は,SQLVAR領域で定義し,BLOB型のデータ入出力時にSQLVAR領域に上書きする形で使用してください。SQLVAR_LOBの内容については,表「SQLVAR_LOBの内容」を参照してください。
(2) SQL記述領域の内容
SQL記述領域の内容を次の表に示します。
レベル 番号※1 |
記述領域名 |
データ型 |
長さ (バイト) |
値の 設定元 |
内 容 |
---|---|---|---|---|---|
1 |
SQLDA |
− |
16+16n [24+24n] |
− |
SQL記述領域全体の名前です。 |
2 |
SQLDAID |
char |
8 |
HiRDB |
SQLDAを示すID 'SQLDA△△△'です。DESCRIBE文,又はDESCRIBE TYPE文を発行したとき格納されます。 |
2 |
SQLDABC |
long |
4 [8]※6 |
HiRDB |
SQLDAの長さです。DESCRIBE文,又はDESCRIBE TYPE文を発行したとき格納されます。 |
2 |
SQLN※2 |
short |
2 |
UAP |
SQLDAの領域を確保したとき,又はSQLDAを使用するとき,確保したSQLDA領域のSQLVARの個数(1〜30000)を指定します。 |
HiRDB |
DESCRIBE文,又はDESCRIBE TYPE文を発行したときSQLDAの領域が不足(SQLN<SQLD)する場合,2進数の0が格納されます。 |
||||
2 |
SQLD |
short |
2 |
UAP |
OPEN文,又はEXECUTE文を発行するとき,USING句に指定するSQL記述領域のSQLDには,入力?パラメタ数を指定します。 EXECUTE文を発行するとき,INTO句に指定するSQL記述領域のSQLDAには,出力?パラメタ数を指定します。FETCH文を発行するときは,検索項目数(1〜4000)を指定します。 |
HiRDB |
DESCRIBE[OUTPUT]文を発行したとき,2進数の0,検索項目数,又は出力?パラメタ数が設定されます。
DESCRIBE INPUT文を発行したとき,入力?パラメタ数が設定されます。 DESCRIBE TYPE文を発行したとき,受け取ろうとしたユーザ定義型と継承している,上位のユーザ定義型の全構成要素数が設定されます。ただし,構成要素数が30000を超えた場合,30001が設定されます。 |
||||
2 |
SQLVAR |
− |
16n [24n] |
− |
SQLDIM,SQLCOD,SQLXDIM,SQLLEN,SQLSYS,SQLDATA,及びSQLINDから構成される領域。この領域は,SQLNで指定した個数,又はそれ以上の領域として繰り返し定義する必要があります。 |
3 |
SQLDIM |
unsigned char |
1 |
− |
未使用 |
3 |
SQLCOD |
unsigned char |
1 |
UAP |
EXECUTE文,OPEN文,又はFETCH文を発行するときデータコード※3を指定します。 |
HiRDB |
DESCRIBE文,又はDESCRIBE TYPE文を発行後,データコード※3が格納されます。 |
||||
3 |
SQLXDIM |
short |
2 |
UAP |
EXECUTE文,OPEN文,又はFETCH文を発行するとき,SQLDAで指定する変数の領域の構造によって,次の値を指定します。
データ領域の構造については,「SQLのデータ型とデータ記述」を参照してください。 |
HiRDB |
DESCRIBE文,又はDESCRIBE TYPE文を発行したとき,検索項目又は?パラメタの構造によって,次の値が設定されます。
|
||||
3 |
SQLLEN※3※4 |
short |
2 |
UAP |
EXECUTE文,OPEN文,又はFETCH文を発行するときの埋込み変数の長さ※3を指定します。 |
HiRDB |
DESCRIBE文,又はDESCRIBE TYPE文を発行したとき,データの定義長※3が格納されます。 |
||||
3 |
SQLSYS |
short |
2 |
UAP |
EXECUTE文,OPEN文,又はFETCH文を発行するとき,次の値を指定します。
|
HiRDB |
DESCRIBE文,又はDESCRIBE TYPE文を発行したとき,0が設定されます。 |
||||
3 |
SQLDATA※5 |
unsigned char * |
4 [8] |
UAP |
EXECUTE文,又はOPEN文を発行するとき,?パラメタ値※5が格納されているデータ領域のアドレスを指定します。FETCH文を発行するとき,データを受け取るためのデータ領域のアドレスを指定します。 |
3 |
SQLIND※5 |
short * |
4 [8] |
UAP |
EXECUTE文,OPEN文,又はFETCH文を発行するとき,標識変数有のデータコードをSQLCODEに設定したときだけ,標識変数の値を受け取るための領域のアドレスを指定します。標識変数の値を受け取るための領域は2バイトです。標識変数の有無の指定については,表「SQL記述領域に設定するデータコードとデータの長さ」を参照してください。 |
- (凡例)
-
△:空白を示します。
−:該当しません。
- 注
-
長さの[ ]内の値は,64ビットモードの場合の長さです。なお,64ビットモードのWindowsの場合,SQLCAは16+24nバイトとなります。
- 注※1
-
表のレベル番号は,SQL記述領域の包含関係を示しています。例えば,レベル番号2の記述領域はレベル番号3の記述領域から構成されることを示します。
- 注※2
-
UAPがSQLNに設定するSQLVARの数は,SQLDに設定する?パラメタ数,又は検索項目数以上にしてください。?パラメタ数,又は検索項目数よりSQLVARの数が小さい場合,それを知らせるために,HiRDBはSQLNに2進数の0(ゼロ)を返します。
- 注※3
-
データの長さ,及びデータコードの詳細については,表「SQL記述領域に設定するデータコードとデータの長さ」を参照してください。
- 注※4
-
パック形式10進数(DECIMAL,INTERVAL YEAR TO DAY,又はINTERVAL HOUR TO SECOND)の場合,SQLLENの領域は次の内容で構成されます。
記述領域名
データ型
長さ(バイト)
内 容
SQLPRCSN
B
1
精度(p)
SQLSCALE
B
1
位取り(s)
- 注※5
-
SQLDATA,及びSQLINDは,DESCRIBE文を実行した時にクリアされるので,DESCRIBE文を使用する場合,その実行後に値を再設定してください。繰返し列の場合に,値を設定するときは次のような構造になります(例として,SQLDATAについて説明します)。
- 注※6
-
64ビットモードの場合,プラットフォームごとのlong型のサイズになります。また,COBOL言語の場合,64ビットモードのときは,long型に対応する宣言は,S9(18) COMPとなります。
SQLのデータの詳細を次の表に示します。
- (凡例)
-
−:該当しません。
- 注※1
-
?パラメタにNULL述語を指定したSQL(? IS NULL)に対して,DESCRIBE INPUT文,又はINPUTを指定したPREPARE文を実行した場合にだけ,HiRDBがこのデータコードを設定します。それ以外の用途ではこのデータコードを使用できません。?パラメタに値を指定するために,DESCRIBE INPUT文,又はINPUTを指定したPREPARE文で受け取ったSQL記述領域を使用する場合は,データコードとデータ長を設定し直してください。
- 注※2
-
UAPで長さ0の可変長文字列を設定する場合,SQLLEN領域に1を設定してください。
- 注※3
-
DESCRIBE文を実行した場合に,サーバからデータ型が返されます。UAPではデータ型の参照ができます。データ型の設定,及びデータの長さの参照,設定はできません。
- 注※4
-
C言語の場合に設定できます。
- 注※5
-
DECIMAL型を使用する場合のCOBOL言語のデータ記述との対応を次に示します。COBOL言語のデータ記述の詳細は,「SQLのデータ型とCOBOL言語のデータ記述」を参照してください。
HiRDBのデータ型
データコード
COBOL言語のデータ記述
10進数
16進数
標識変数
[LARGE]
DEC[IMAL]
[(p[,s])]
228
E4
なし
L1 基本項目名
PICTURE S9(p-s)[V9(s)]
COMPUTATIONAL-3.
229
E5
あり
234
EA
なし
L1 基本項目名
PICTURE S9(p-s)[V9(s)]
DISPLAY SIGN LEADING SEPARATE.
235
EB
あり
236
EC
なし
L1 基本項目名
PICTURE S9(p-s)[V9(s)]
DISPLAY SIGN TRAILING.
237
ED
あり
表B‒3 SQLVAR_LOBの内容 レベル
番号※1
記述領域名
データ型
長さ
(バイト)
値の
設定元
内 容
2
SQLVAR_LOB
−
16n
[24n]
−
SQLDIM,SQLCOD,SQLXDIM,SQLLOBLEN,SQLDATA, SQLDATA,及びSQLLOBINDから構成される領域です。この領域は,SQLVARで定義し,BLOB型,及びBINARY型のデータを入出力するときにSQLVAR領域に上書きする形で使用してください。
3
SQLDIM
unsigned char
1
−
未使用
3
SQLCOD
unsigned char
1
UAP
EXECUTE文,OPEN文,又はFETCH文を発行するときデータコード※2を指定します。
HiRDB
DESCRIBE文,又はDESCRIBE TYPE文を発行後,データコード※2が格納されます。
3
SQLXDIM
short
2
UAP
EXECUTE文,OPEN文,又はFETCH文を発行するとき,1を指定します。データ領域の構造については,「SQLのデータ型とデータ記述」を参照してください。
HiRDB
DESCRIBE文,又はDESCRIBE TYPE文を発行したとき,1が格納されます。
3
SQLLOBLEN※2
long [int]
4
UAP
EXECUTE文,OPEN文,又はFETCH文を発行するときの埋込み変数の長さ※2を指定します。
HiRDB
DESCRIBE文,又はDESCRIBE TYPE文を発行したとき,データの定義長※2が格納されます。
3
SQLDATA※3
unsigned char *
4 [8]
UAP
EXECUTE文,又はOPEN文を発行するとき,?パラメタ値が格納されているデータ領域のアドレスを指定します。FETCH文を発行するとき,データを受け取るためのデータ領域のアドレスを指定します。
3
SQLLOBIND※3
long *
[int *]
4 [8]
UAP
EXECUTE文,OPEN文,又はFETCH文を発行するとき,標識変数有のデータコードをSQLCODEに設定したときだけ,標識変数の値を受け取るための領域のアドレスを指定します。標識変数の値を受け取るための領域は4バイトです。標識変数の有無の指定については,表「SQL記述領域に設定するデータコードとデータの長さ」を参照してください。
- (凡例)
-
−:該当しません。
- 注
-
データ型,及び長さの[ ]内は,64ビットモードの場合のデータ型,及び長さです。
- 注※1
-
表のレベル番号は,SQL記述領域の包含関係を示しています。例えば,レベル番号2の記述領域はレベル番号3の記述領域から構成されることを示します。
- 注※2
-
データの長さ,及びデータコードの詳細については,表「SQL記述領域に設定するデータコードとデータの長さ」を参照してください。
- 注※3
-
SQLDATA,及びSQLLOBINDは,DESCRIBE文を実行した時にクリアされるので,DESCRIBE文を使用する場合,その実行後に値を再設定してください。繰返し列の場合に,値を設定するときの構造については,表「SQL記述領域の内容」の注※5を参照してください。