Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


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

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

〈この項の構成〉

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

(2) SQL記述領域の内容

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

表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

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,検索項目数,又は出力?パラメタ数が設定されます。

  • 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(領域の最大要素数を示す整数)

データ領域の構造については,「SQLのデータ型とデータ記述」を参照してください。

HiRDB

DESCRIBE文,又はDESCRIBE TYPE文を発行したとき,検索項目又は?パラメタの構造によって,次の値が設定されます。

単純構造の場合:

1

繰返し構造の場合:

2〜30000(領域の最大要素数を示す整数)

3

SQLLEN※3※4

short

2

UAP

EXECUTE文,OPEN文,又はFETCH文を発行するときの埋込み変数の長さ※3を指定します。

HiRDB

DESCRIBE文,又はDESCRIBE TYPE文を発行したとき,データの定義長※3が格納されます。

3

SQLSYS

short

2

UAP

EXECUTE文,OPEN文,又はFETCH文を発行するとき,次の値を指定します。

  • 繰返し構造,又は配列構造の可変長の文字列型(VARCHAR,NVARCHAR,MVARCHAR)を指定した場合,ギャップを含む1要素の領域の長さ

  • 上記以外の場合は0

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のデータの詳細を次の表に示します。

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

データ

コード

10進数

データ

コード

16進数

標識

変数

データ型

データの長さ

単位

0

00

HiRDBにはないデータ型

0

バイト

1

01

任意のデータ型※1

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])]※5

精度p,位取り因数s

1≦p≦38,0≦s≦p

けた

229

E5

あり

234

EA

なし

[LARGE]DEC[IMAL][(p[,s])]※5

精度p,位取り因数s

1≦p≦38,0≦s≦p

235

EB

あり

236

EC

なし

[LARGE]DEC[IMAL][(p[,s])]※5

精度p,位取り因数s

1≦p≦38,0≦s≦p

237

ED

あり

240

F0

なし

INT[EGER]

4

バイト

241

F1

あり

244

F4

なし

SMALLINT

2

245

F5

あり

(凡例)

−:該当しません。

注※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

あり

(凡例)

L1:レベル番号01〜49,又は77

p:精度(全体のけた数)

s:位取り(小数点以下のけた数)

表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を参照してください。