スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド

[目次][索引][前へ][次へ]

付録B.1 SQL記述領域の構成と内容

UAP実行時に動的に決定した入出力変数の情報を記述する領域の構成,及び内容について説明します。

<この項の構成>
(1) SQL記述領域の構成
(2) SQL記述領域の内容

(1) SQL記述領域の構成

SQL記述領域の構成を次の図に示します。

図B-1 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の内容については,「表B-3 SQLVAR_LOBの内容」を参照してください。

(2) SQL記述領域の内容

SQL記述領域の内容を表B-1に示します。

なお,SQLのデータの詳細は,表B-2に示します。

表B-1 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 SQLN2 short 2 UAP SQLDAの領域を確保したとき,又はSQLDAを使用するとき,確保したSQLDA領域のSQLVARの個数(1〜4000)を指定します。
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,検索項目数,又は出力?パラメタ数が設定されます。
  • 0:前処理したSQLがSELECT文以外で,かつ出力?パラメタがあるCALL文以外
  • 検索項目数:前処理したSQLがSELECT文
  • 出力?パラメタ数:前処理したSQLがCALL文
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で指定する変数の領域の構造によって,次の値を指定します。

単純構造の場合:
1

繰返し構造の場合:
2〜30000(領域の最大要素数を示す整数)
データ領域の構造については,「付録F SQLのデータ型とデータ記述」を参照してください。
HiRDB DESCRIBE文,又はDESCRIBE TYPE文を発行したとき,検索項目又は?パラメタの構造によって,次の値が設定されます。

単純構造の場合:
1

繰返し構造の場合:
2〜30000(領域の最大要素数を示す整数)
3 SQLLEN34 short 2 UAP EXECUTE文,OPEN文,又はFETCH文を発行するときデータの長さ3を指定します。
HiRDB DESCRIBE文,又はDESCRIBE TYPE文を発行したとき,データの長さ3が格納されます。
3 SQLSYS short 2 UAP EXECUTE文,OPEN文,又はFETCH文を発行するとき,次の値を指定します。
  • 繰返し構造,又は配列構造の可変長の文字列方(VARCHAR,NVARCHAR,MVARCHAR)を指定した場合,ギャップを含む1要素の領域の長さ
  • 上記以外の場合
HiRDB DESCRIBE文,又はDESCRIBE TYPE文を発行したとき,0が設定されます。
3 SQLDATA5 unsigned char * 4 [8] UAP EXECUTE文,又はOPEN文を発行するとき,?パラメタ値5が格納されているデータ領域のアドレスを指定します。FETCH文を発行するとき,データを受け取るためのデータ領域のアドレスを指定します。
3 SQLIND5 short * 4 [8] UAP EXECUTE文,OPEN文,又はFETCH文を発行するとき,標識変数有のデータコードをSQLCODEに設定したときだけ,標識変数の値を受け取るための領域のアドレスを指定します。標識変数の値を受け取るための領域は2バイトです。標識変数の有無の指定については,「表B-2 SQL記述領域に設定するデータコードとデータの長さ」を参照してください。

(凡例)
△:空白を示します。
−:該当しません。

長さの[ ]内の値は,64ビットモードの場合の長さです。なお,64ビットモードのWindowsの場合,SQLCAは16+24nバイトとなります。

注※1
表のレベル番号は,SQL記述領域の包含関係を示しています。例えば,レベル番号2の記述領域はレベル番号3の記述領域から構成されることを示します。

注※2
UAPがSQLNに設定するSQLVARの数は,SQLDに設定する?パラメタ数,又は検索項目数以上にしてください。?パラメタ数,又は検索項目数よりSQLVARの数が小さい場合,それを知らせるために,HiRDBはSQLNに2進数の0(ゼロ)を返します。

注※3
データの長さ,及びデータコードの詳細については,「表B-2 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となります。

 

表B-2 SQL記述領域に設定するデータコードとデータの長さ

データ
コード
10進数
データ
コード
16進数
標識
変数
データ型 データの長さ 単位
0 00 HiRDBにはないデータ型※1 0 バイト
1 01 任意のデータ型6 0
48 30 なし C VARCHAR(n)※4 1≦n≦32000※2
49 31 あり
68 44 なし ROW 操作対象表の行長L
1≦L≦30000
69 45 あり
100 64 なし INTERVAL YEAR TO DAY 精度8,位取り0 けた
101 65 あり
110 6E なし INTERVAL HOUR TO SECOND 精度6,位取り0
111 6F あり
112 70 なし DATE 4 バイト
113 71 あり
120 78 なし TIME 3
121 79 あり
124 7C なし TIMESTAMP[(p)] 7+↑p÷2↑
p=0,2,4,又は6
125 7D あり
131 83 抽象データ型※3
144 90 なし BINARY(n) 1≦n≦2147483647※2 バイト
145 91 あり
146 92 なし BLOB[(n)] 1≦n≦2147483647
147 93 あり
154 9A なし BINARY位置付け子 4
155 9B あり
158 9E なし BLOB位置付け子 4
159 9F あり
160 A0 なし MVARCHAR(n) 1≦n≦32000※2
161 A1 あり
164 A4 なし MCHAR[(n)] 1≦n≦30000
165 A5 あり
176 B0 なし NVARCHAR(n) 1≦n≦16000※2 文字
177 B1 あり
180 B4 なし NCHAR[(n)],又は
NATIONAL CHAR[ACTER][(n)]
1≦n≦15000
181 B5 あり
192 C0 なし VARCHAR(n) 1≦n≦32000※2 バイト
193 C1 あり
196 C4 なし CHAR[ACTER](n) 1≦n≦30000
197 C5 あり
224 E0 なし FLOAT,又は
DOUBLE PRECISION
8
225 E1 あり
226 E2 なし SMALLFLT,又は
REAL
4
227 E3 あり
228 E4 なし [LARGE]DEC[IMAL][(p[,s])] 精度p,位取り因数s
1≦p≦29,0≦s≦p
けた
229 E5 あり
234 EA なし DISPLAY SIGN LEADING SEPARATE※5 精度p,位取り因数s
1≦p≦29,0≦s≦p
235 EB あり
236 EC なし DISPLAY SIGN TRAILING※5 精度p,位取り因数s
1≦p≦29,0≦s≦p
237 ED あり
240 F0 なし INT[EGER] 4 バイト
241 F1 あり
244 F4 なし SMALLINT 2
245 F5 あり

(凡例)
−:該当しません。

HiRDB以外の分散サーバへのリモートデータベースアクセスでは,DESCRIBE文が分散サーバのデータ型をそれに対応するHiRDBのデータ型に変換します。DESCRIBE文によるデータ型の変換については,「12.4 使用できるデータ型」を参照してください。

注※1
HiRDB以外のDBMSにリモートデータベースアクセスするDESCRIBE文を実行したときに,サーバ側のデータ型に対応するHiRDBのデータ型がない場合,データコード0が設定されます。このデータコードの設定される列のデータには,リモートデータベースアクセスできません。なお,DESCRIBE文以外のSQL文では,UAPでデータコード0を設定できません。また,HiRDBのディクショナリ表には,データコード0はありません。分散クライアント機能を利用したリモートデータベースアクセスをするときの分散サーバとのデータ型との関連性については,「12.4 使用できるデータ型」を参照してください。

注※2
UAPで長さ0の可変長文字列を設定する場合,SQLLEN領域に1を設定してください。

注※3
DESCRIBE文を実行した場合に,サーバからデータ型が返されます。UAPではデータ型の参照ができます。データ型の設定,及びデータの長さの参照,設定はできません。

注※4
C言語の場合に設定できます。

注※5
COBOL言語の場合に設定できます。

注※6
?パラメタにNULL述語を指定したSQL(? IS NULL)に対して,DESCRIBE INPUT文,又はINPUTを指定したPREPARE文を実行した場合にだけ,HiRDBがこのデータコードを設定します。それ以外の用途ではこのデータコードを使用できません。?パラメタに値を指定するために,DESCRIBE INPUT文,又はINPUTを指定したPREPARE文で受け取ったSQL記述領域を使用する場合は,データコードとデータ長を設定し直してください。

表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を指定します。データ領域の構造については,「付録F SQLのデータ型とデータ記述」を参照してください。
HiRDB DESCRIBE文,又はDESCRIBE TYPE文を発行したとき,1が格納されます。
3 SQLLOBLEN2 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バイトです。標識変数の有無の指定については,「表B-2 SQL記述領域に設定するデータコードとデータの長さ」を参照してください。

(凡例)
−:該当しません。

データ型,及び長さの[ ]内は,64ビットモードの場合のデータ型,及び長さです。

注※1
表のレベル番号は,SQL記述領域の包含関係を示しています。例えば,レベル番号2の記述領域はレベル番号3の記述領域から構成されることを示します。

注※2
データの長さ,及びデータコードの詳細については,「表B-2 SQL記述領域に設定するデータコードとデータの長さ」を参照してください。

注※3
SQLDATA,及びSQLLOBINDは,DESCRIBE文を実行した時にクリアされるので,DESCRIBE文を使用する場合,その実行後に値を再設定してください。繰返し列の場合に,値を設定するときの構造については,表B-1の注※5を参照してください。