Hitachi

ノンストップデータベース HiRDB Version 9 コマンドリファレンス(Windows(R)用)


8.11.4 UOCインタフェース

〈この項の構成〉

(1) UOCインタフェース領域の構造と内容

pdrorgとUOCとの連絡は,インタフェース領域を使用して情報の入出力をします。これをUOCインタフェース領域といいます。

この領域は,更新バッファを除いて,すべてpdrorgが確保します。UOCは,呼び出す関数の第1引数にこの領域のアドレスを受け取って,参照及び更新をします。

UOCインタフェース領域の構造を次の図に示します。

図8‒28 UOCインタフェース領域の構造(1/2)

[図データ]

注1

[ ]内は,64ビットモードのHiRDBの場合の数値となります。

注2

UOCインタフェース領域の内容については表「UOCインタフェース領域の内容」を,列定義情報アドレスリストの内容については表「列定義情報アドレスリストの内容」を,列定義情報領域の内容については表「列定義情報領域の内容」を,抽象データ型逆生成パラメタ情報領域の内容については表「抽象データ型逆生成パラメタ情報領域の内容」を参照してください。

図8‒29 UOCインタフェース領域の構造(2/2)

[図データ]

注1

[ ]内は,64ビットモードのHiRDBの場合の数値となります。

注2

データアドレスリストの内容については表「データアドレスリストの内容」を,更新後データアドレスリストの内容については表「更新後データアドレスリストの内容」を参照してください。

表8‒32 UOCインタフェース領域の内容

相対位置

フィールド名

長さ(単位:バイト)

属性

値の設定元

内容

32

64

32

64

0

0

アイキャッチャ

8

8

char

pdrorg

インタフェース領域('*UOCINF*')

8

8

実行中プログラム

4

4

int

pdrorg

制御が渡っているプログラム

0:pdrorg

1:UOC

12

12

呼び出し種別

4

4

int

pdrorg

UOCに対する処理要求種別

o:開始要求

e:データ更新要求

c:終了要求

t:停止要求

16

16

認可識別子の長さ

2

2

short

pdrorg

対象表の所有者名の長さ

18

18

認可識別子

30

30

char

pdrorg

対象表の所有者名

48

48

表識別子の長さ

2

2

short

pdrorg

対象表の名称の長さ

50

50

表識別子

30

30

char

pdrorg

対象表の名称

80

80

行長

4

8

long

pdrorg

データ格納方法がYの場合,行長を設定します。

84

88

データアドレスリストのアドレス

4

8

void*

pdrorg

pdrorgが検索したデータのアドレスを格納している,データアドレスリストの先頭アドレス

88

96

システムが使用する情報

4

8

long

pdrorg

システムが使用する情報(UOC側では使用しないでください)

92

104

更新後データアドレスリストのアドレス

4

8

void*

UOC

UOCで更新したデータをpdrorgに返却する場合は,UOC内で作成したデータのアドレスを格納している更新後データアドレスリストの先頭アドレスを設定します。データを更新しない場合は,0を設定します。

96

112

ユーザパラメタのアドレス

4

8

void*

pdrorg

unlduoc文のparamオペランドに指定した文字列のアドレスを設定します(文字列の末尾は\0)。paramオペランドを省略した場合は,ナル値を設定します。

100

120

列定義情報アドレスのアドレス

4

8

void*

pdrorg

対象表の列定義情報アドレスリストの先頭アドレス

104

128

予備

1

1

char

pdrorg

予備領域(UOC側では使用しないでください)

105

129

表の属性

1

1

char

pdrorg

対象表の表属性

F:FIX表

空白:非FIX表

106

130

列数

2

2

short

pdrorg

対象表の列数

108

132

格納フラグ

1

1

char

UOC

格納フラグを設定します。

Y:アンロードデータファイルに格納します。

N:アンロードデータファイルに格納しません。

pdrorg側でアンロードデータファイルを作成する場合,必ず設定してください(UOCでUOCデータファイルを作成する場合は指定しなくてもかまいません)。

109

133

データ格納方法

1

1

char

pdrorg

FIX表の場合,unlduoc文のfixrowオペランドに指定した値(fixrow省略時はN)を設定します。

Y:列定義順にデータを詰めて(連続して)渡します。

N:データ型のバウンダリに従ってデータの開始アドレスを補正して渡します。

110

134

予備

10

10

char

pdrorg

予備領域(UOC側では使用しないでください)

120

144

リターンコード

4

4

int

UOC

リターンコードを設定します。

pdrorgから制御を受け取ったUOCは,次の基準でリターンコードをコールごとに戻してください。

0:

各要求に対する処理が正常に実行された場合に設定します。

4:

デバッグなどで,正常時もメッセージを出力したい場合に設定します。内容は0と同じです。リターンコードに4を設定した場合,メッセージは3回まで出力されます。ただし,メッセージが3回出力された後に4を設定しても無視され,メッセージは出力されません。

8:

UOCの処理中にエラーが発生した場合に設定します。

上記以外のリターンコードが設定された場合,pdrorgは処理を中断し終了します。また,リターンコードに4又は8を設定すると,メッセージ埋め込み領域の内容を標準出力及びメッセージログに出力します。メッセージは,末尾に\0を付けて131バイト以内の文字列にしてください。先頭データが\0の場合はメッセージは出力しません。

124

148

メッセージ埋め込み領域

132

132

char

pdrorg

UOC

標準出力及びメッセージログに出力するメッセージの格納領域(pdrorgは先頭データを\0にして渡します)

(凡例)

32:32ビットモードのHiRDBの相対位置,及び長さを示します。

64:64ビットモードのHiRDBの相対位置,及び長さを示します。

注1

先頭アドレスは,32ビットモードのHiRDBの場合は4バイトのバウンダリ,64ビットモードのHiRDBの場合は8バイトのバウンダリを保証します。

注2

各フィールドに対する参照,更新可否を次に示します。

フィールド名

呼び出し種別

開始要求

データ更新要求

終了要求

停止要求

アイキャッチャ

実行中プログラム

呼び出し種別

認可識別子の長さ

認可識別子

表識別子の長さ

表識別子

行長

×

×

×

データアドレスリストのアドレス

×

×

×

更新後データアドレスリストのアドレス

×

×

×

ユーザパラメタのアドレス

列定義情報アドレスのアドレス

表の属性

列数

データ格納方法

×

×

×

メッセージ埋め込み領域

リターンコード

格納フラグ

×

×

×

(凡例)

○:値を設定できます。

△:値を参照できます。

×:値を参照できません(値が保証されません)。

表8‒33 列定義情報アドレスリストの内容

相対位置

フィールド名

長さ(単位:バイト)

属性

値の設定元

内容

32

64

32

64

0

0

列ID1の定義情報アドレス

4

8

void*

pdrorg

列ID1の列定義情報のアドレスが設定されます。

4

8

列ID2の定義情報アドレス

4

8

void*

pdrorg

列ID2の列定義情報のアドレスが設定されます。

(n-1)×4

(n-1)×8

列IDnの定義情報アドレス

4

8

void*

pdrorg

列IDnの列定義情報のアドレスが設定されます。

(凡例)

32:32ビットモードのHiRDBの相対位置,及び長さを示します。

64:64ビットモードのHiRDBの相対位置,及び長さを示します。

注1

先頭アドレスは,32ビットモードのHiRDBの場合は4バイトのバウンダリ,64ビットモードのHiRDBの場合は8バイトのバウンダリを保証します。

注2

列定義情報アドレスリストの内容は,列の定義順に連続して渡します。

表8‒34 列定義情報領域の内容

相対位置

フィールド名

長さ(単位:バイト)

属性

値の設定元

内容

32

64

32

64

0

0

列名長

2

2

short

pdrorg

列名の長さが設定されます。

2

2

列名

30

30

char

pdrorg

列名が設定されます。

32

32

列ID

2

2

short

pdrorg

列のIDが設定されます。

34

34

予備1

1

1

35

35

データ型

1

1

unsigned char

pdrorg

列のデータ型が設定されます。各データ型のデータコードとデータ値のバウンダリについては,表「各データ型のデータコードとデータ値のバウンダリ」を参照してください。

36

36

定義長

2

2

short

pdrorg

列の定義長が設定されます。列の定義長領域の長さと内容については,表「列の定義長領域の長さと内容」を参照してください。

38

38

繰り返し回数

2

2

short

pdrorg

列の繰り返し回数が設定されます。

40

40

BLOB長,又はBINARY長

8

8

int[2]

pdrorg

列のデータ型が長大データ型,又はBINARY型の場合に設定されます。上位4バイトには0,下位4バイトには長大データ型の定義長がバイト単位で設定されます。

48

48

パラメタ数

2

2

short

pdrorg

抽象データ型の場合,該当するunld_func文の関数の数(パラメタ数)が設定されます。なお,次の場合は,0が設定されます。

  • 列のデータ型が抽象データ型以外の場合

  • unld_func文を指定していない抽象データ型の場合

50

50

予備2

6

6

char

pdrorg

予備領域

56

56

拡張アドレス

4

8

void*

pdrorg

抽象データ型逆生成パラメタ情報の先頭アドレスが設定されます。なお,パラメタ数が0の場合は,0が設定されます。

60

64

予備3

64

64

char

pdrorg

予備領域

(凡例)

32:32ビットモードのHiRDBの相対位置,及び長さを示します。

64:64ビットモードのHiRDBの相対位置,及び長さを示します。

−:該当する内容はありません。

先頭アドレスは,32ビットモードのHiRDBの場合は4バイトのバウンダリ,64ビットモードのHiRDBの場合は8バイトのバウンダリを保証します。

表8‒35 抽象データ型逆生成パラメタ情報領域の内容

相対位置

フィールド名

長さ(単位:バイト)

属性

値の設定元

内容

0

パラメタ番号

2

short

pdrorg

パラメタ番号(1が先頭)

2

データ型

1

unsigned char

pdrorg

パラメタのデータ型が設定されます。各データ型のデータコードとデータ値のバウンダリについては,表「各データ型のデータコードとデータ値のバウンダリ」を参照してください。

3

予備1

3

char

pdrorg

予備領域

6

定義長

2

short

pdrorg

パラメタの定義長が設定されます。列の定義長領域の長さと内容については,表「列の定義長領域の長さと内容」を参照してください。

8

BLOB長,又はBINARY長

8

int[2]

pdrorg

パラメタのデータ型が長大データ型,又はBINARY型の場合,BLOB長が設定されます。上位4バイトには0,下位4バイトには長大データ型の定義長がバイト単位で設定されます。

16

予備2

112

char

pdrorg

予備領域

注1

先頭アドレスは,32ビットモードのHiRDBの場合は4バイトのバウンダリ,64ビットモードのHiRDBの場合は8バイトのバウンダリを保証します。

注2

抽象データ型逆生成パラメタ情報領域の内容は,unld_func文で指定した関数(パラメタ)の順に連続して渡します。

表8‒36 列の定義長領域の長さと内容

データ型

領域長

内容

DECIMAL,LARGE DECIMAL,

INTERVAL YEAR TO DAY,及び

INTERVAL HOUR TO SECOND

上位1バイト

定義で指定した精度です。

下位1バイト

定義で指定した位取りです。

TIMESTAMP(p)

2バイト

7+↑p/2↑

BLOB,抽象データ型,及びBINARY

2バイト

値は保証されません。

上記以外

2バイト

定義長です。

表8‒37 各データ型のデータコードとデータ値のバウンダリ

データ型

データコード(16進数)

バウンダリ(単位:バイト)

非ナル値制約指定なし

非ナル値制約指定あり

MVARCHAR

A1

A0

2

MCHAR

A5

A4

NVARCHAR

B1

B0

2

NCHAR

B5

B4

VARCHAR

C1

C0

2

CHAR

C5

C4

FLOAT

E1

E0

8

SMALLFLT

E3

E2

4

DECIMAL

E5

E4

INTEGER

F1

F0

4

SMALLINT

F5

F4

2

INTERVAL YEAR TO DAY

65

64

DATE

71

70

TIME

79

78

INTERVAL HOUR TO SECOND

6F

6E

TIMESTAMP

7D

7C

BINARY

91

90

4

BLOB

93

92

4

抽象データ型

抽象データ型パラメタのアドレスリスト

83

82

32ビットモードのHiRDBの場合は4,64ビットモードのHiRDBの場合は8

パラメタのデータ

パラメタの各データ型に従います。

(凡例)−:アドレスのバウンダリを調整しません。
表8‒38 データアドレスリストの内容

相対位置

フィールド名

長さ(単位:バイト)

属性

値の設定元

内容

32

64

32

64

0

0

列ID1のデータ格納アドレス

4

8

void*

pdrorg

列ID1のデータのアドレスが設定されます。

4

8

列ID2のデータ格納アドレス

4

8

void*

pdrorg

列ID2のデータのアドレスが設定されます。

(n-1)×4

(n-1)×8

列IDnのデータ格納アドレス

4

8

void*

pdrorg

列IDnのデータのアドレスが設定されます。

(凡例)

32:32ビットモードのHiRDBの相対位置,及び長さを示します。

64:64ビットモードのHiRDBの相対位置,及び長さを示します。

注1

先頭アドレスは,32ビットモードのHiRDBの場合は4バイトのバウンダリ,64ビットモードのHiRDBの場合は8バイトのバウンダリを保証します。

注2

データアドレスリストの内容は,列の定義順に連続して渡します。

注3

列値がナル値の場合は,0が設定されます。

注4

FIX表の場合,UOCインタフェース領域のデータ格納方法がYのときは,データバッファは列ID1のデータ格納アドレスが示すアドレスから,UOC情報の行長分連続した領域で格納します。このとき,列ID順に格納します。

注5

UOCインタフェース領域のデータ格納方法がNの場合,データ型ごとに設定されたバウンダリで,データの開始アドレスを調整して設定します。なお,列ごとにデータは連続していません。

注6

列定義情報領域のパラメタ数が0の場合は,0が設定されます。

表8‒39 更新後データアドレスリストの内容

相対位置

フィールド名

長さ(単位:バイト)

属性

値の設定元

内容

32

64

32

64

0

0

列ID1のデータ格納アドレス

4

8

void*

UOC

列ID1のデータのアドレスを設定します。

4

8

列ID2のデータ格納アドレス

4

8

void*

UOC

列ID2のデータのアドレスを設定します。

(n-1)×4

(n-1)×8

列IDnのデータ格納アドレス

4

8

void*

UOC

列IDnのデータのアドレスを設定します。

(凡例)

32:32ビットモードのHiRDBの相対位置,及び長さを示します。

64:64ビットモードのHiRDBの相対位置,及び長さを示します。

注1

先頭アドレスは,32ビットモードのHiRDBの場合は4バイトのバウンダリ,64ビットモードのHiRDBの場合は8バイトのバウンダリを保証してください。

注2

データ更新後のデータアドレスリストは,列の定義順に連続した領域で設定してください。

注3

データのアドレス値として,データアドレスリストのデータ格納アドレスを設定してもかまいません。ただし,データ値は更新しないでください。

注4

データのアドレスは,バウンダリを保証しなくてもかまいません。

注5

列定義で非ナル値制約指定なしの列の列値を,ナル値に変更する場合は0を設定してください。非ナル値制約指定有無によるデータ変更可否を次に示します。

列の属性

更新前のデータ

更新後のデータ

非ナル値

ナル値

非ナル値制約指定なし

ナル値

非ナル値

非ナル値制約指定あり

非ナル値

×

(凡例)

○:変更できます。

×:変更できません。

注6

予備列が定義されたFIX表の場合,予備列の値を更新しても,アンロードファイルには反映されません。予備列にデータを格納してアンロードしたい場合は,UOCを利用してファイルを出力してください。UOCを利用したファイル出力については,「unload文(アンロードデータファイルの情報の記述)」を参照してください。

(2) データ値の形式

各データ型のデータ値の形式を次に示します。

(a) INTEGER又はSMALLINT

[図データ]

(b) FLOAT又はSMALLFLT

[図データ]

(c) DECIMAL

[図データ]

(d) CHAR,MCHAR,VARCHAR,又はMVARCHAR

文字コード変換なし又は変換後もデータ長が変化しない文字コード変換をした場合の形式を次に示します。

[図データ]

(e) CHAR又はVARCHAR

文字コード変換後にデータ長が変化する場合の形式を次に示します。

[図データ]

(f) NCHAR又はNVARCHAR

[図データ]

(g) DATE

[図データ]

(h) TIME

[図データ]

(i) INTERVAL YEAR TO DAY

[図データ]

(j) INTERVAL HOUR TO SECOND

[図データ]

(k) TIMESTAMP

[図データ]

(l) BINARY

[図データ]

(m) BLOB

[図データ]

(n) 抽象データ型

抽象データ型の場合は,抽象データ型パラメタのアドレスリストが格納されます。抽象データ型パラメタのアドレスリストの構造を次の図に示します。

図8‒30 抽象データ型パラメタのアドレスリストの構造

[図データ]

また,抽象データ型パラメタのアドレスリストの内容を次の表に示します。

表8‒40 抽象データ型パラメタのアドレスリストの内容

相対位置

フィールド名

長さ(単位:バイト)

属性

値の設定元

内容

0

第1パラメタのデータのアドレス

4

void*

UOC

第1パラメタのデータのアドレスが設定されます。

4

第2パラメタのデータのアドレス

4

void*

UOC

第2パラメタのデータのアドレスが設定されます。

(n-1)×4

第nパラメタのデータのアドレス

4

void*

UOC

第nパラメタのデータのアドレスが設定されます。

注1

先頭アドレスは,4バイトのバウンダリを保証します。

注2

パラメタのデータの開始アドレスは,データ型ごとに設定したバウンダリで調整したアドレスが設定されます。

注3

抽象データ型パラメタのアドレスリストの内容は,unld_func文で指定した関数(パラメタ)の順に連続して渡します。

(o) 繰返し列の場合

[図データ]