8.11.4 UOCインタフェース
- 〈この項の構成〉
(1) UOCインタフェース領域の構造と内容
pdrorgとUOCとの連絡は,インタフェース領域を使用して情報の入出力をします。これをUOCインタフェース領域といいます。
この領域は,更新バッファを除いて,すべてpdrorgが確保します。UOCは,呼び出す関数の第1引数にこの領域のアドレスを受け取って,参照及び更新をします。
UOCインタフェース領域の構造を次の図に示します。
- 注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) 抽象データ型
抽象データ型の場合は,抽象データ型パラメタのアドレスリストが格納されます。抽象データ型パラメタのアドレスリストの構造を次の図に示します。
また,抽象データ型パラメタのアドレスリストの内容を次の表に示します。
相対位置 |
フィールド名 |
長さ(単位:バイト) |
属性 |
値の設定元 |
内容 |
---|---|---|---|---|---|
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文で指定した関数(パラメタ)の順に連続して渡します。