8.10.4 UOCインタフェース

<この項の構成>
(1) UOCインタフェース領域の構造と内容
(2) データ値の形式

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

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

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

UOCインタフェース領域の構造を図8-27及び図8-28に示します。

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

[図データ]

注1
[ ]内は,64ビットモードのHiRDBの場合の数値となります。
注2
UOCインタフェース領域の内容については表8-30を,列定義情報アドレスリストの内容については表8-31を,列定義情報領域の内容については表8-32を,抽象データ型逆生成パラメタ情報領域の内容については表8-33を参照してください。

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

[図データ]
注1
[ ]内は,64ビットモードのHiRDBの場合の数値となります。
注2
データアドレスリストの内容については表8-36を,更新後データアドレスリストの内容については表8-37を参照してください。

表8-30 UOCインタフェース領域の内容

相対位置フィールド名長さ(単位:バイト)属性値の設定元内容
32643264
00アイキャッチャ88charpdrorgインタフェース領域('*UOCINF*')
88実行中プログラム44intpdrorg制御が渡っているプログラム
0:pdrorg
1:UOC
1212呼び出し種別44intpdrorgUOCに対する処理要求種別
o:開始要求
e:データ更新要求
c:終了要求
t:停止要求
1616認可識別子の長さ22shortpdrorg対象表の所有者名の長さ
1818認可識別子3030charpdrorg対象表の所有者名
4848表識別子の長さ22shortpdrorg対象表の名称の長さ
5050表識別子3030charpdrorg対象表の名称
8080行長48longpdrorgデータ格納方法がYの場合,行長を設定します。
8488データアドレスリストのアドレス48void*pdrorgpdrorgが検索したデータのアドレスを格納している,データアドレスリストの先頭アドレス
8896システムが使用する情報48longpdrorgシステムが使用する情報(UOC側では使用しないでください)
92104更新後データアドレスリストのアドレス48void*UOCUOCで更新したデータをpdrorgに返却する場合は,UOC内で作成したデータのアドレスを格納している更新後データアドレスリストの先頭アドレスを設定します。データを更新しない場合は,0を設定します。
96112ユーザパラメタのアドレス48void*pdrorgunlduoc文のparamオペランドに指定した文字列のアドレスを設定します(文字列の末尾は¥0)。paramオペランドを省略した場合は,ナル値を設定します。
100120列定義情報アドレスのアドレス48void*pdrorg対象表の列定義情報アドレスリストの先頭アドレス
104128予備11charpdrorg予備領域(UOC側では使用しないでください)
105129表の属性11charpdrorg対象表の表属性
F:FIX表
空白:非FIX表
106130列数22shortpdrorg対象表の列数
108132格納フラグ11charUOC格納フラグを設定します。
Y:アンロードデータファイルに格納します。
N:アンロードデータファイルに格納しません。
pdrorg側でアンロードデータファイルを作成する場合,必ず設定してください(UOCでUOCデータファイルを作成する場合は指定しなくてもかまいません)。
109133データ格納方法11charpdrorgFIX表の場合,unlduoc文のfixrowオペランドに指定した値(fixrow省略時はN)を設定します。
Y:列定義順にデータを詰めて(連続して)渡します。
N:データ型のバウンダリに従ってデータの開始アドレスを補正して渡します。
110134予備1010charpdrorg予備領域(UOC側では使用しないでください)
120144リターンコード44intUOCリターンコードを設定します。
pdrorgから制御を受け取ったUOCは,次の基準でリターンコードをコールごとに戻してください。
0:
各要求に対する処理が正常に実行された場合に設定します。
4:
デバックなどで,正常時もメッセージを出力したい場合に設定します。内容は0と同じです。リターンコードに4を設定した場合,メッセージは3回まで出力されます。ただし,メッセージが3回出力された後に4を設定しても無視され,メッセージは出力されません。
8:
UOCの処理中にエラーが発生した場合に設定します。
上記以外のリターンコードが設定された場合,pdrorgは処理を中断し終了します。また,リターンコードに4又は8を設定すると,メッセージ埋め込み領域の内容を標準出力及びメッセージログに出力します。メッセージは,末尾に¥0を付けて131バイト以内の文字列にしてください。先頭データが¥0の場合はメッセージは出力しません。
124148メッセージ埋め込み領域132132charpdrorg
UOC
標準出力及びメッセージログに出力するメッセージの格納領域(pdrorgは先頭データを¥0にして渡します)
(凡例)
32:32ビットモードのHiRDBの相対位置,及び長さを示します。
64:64ビットモードのHiRDBの相対位置,及び長さを示します。
注1
先頭アドレスは,32ビットモードのHiRDBの場合は4バイトのバウンダリ,64ビットモードのHiRDBの場合は8バイトのバウンダリを保証します。
注2
各フィールドに対する参照,更新可否を次に示します。
フィールド名呼び出し種別
開始要求データ更新要求終了要求停止要求
アイキャッチャ
実行中プログラム
呼び出し種別
認可識別子の長さ
認可識別子
表識別子の長さ
表識別子
行長×××
データアドレスリストのアドレス×××
更新後データアドレスリストのアドレス×××
ユーザパラメタのアドレス
列定義情報アドレスのアドレス
表の属性
列数
データ格納方法×××
メッセージ埋め込み領域
リターンコード
格納フラグ×××
(凡例)
○:値を設定できます。
△:値を参照できます。
×:値を参照できません(値が保証されません)。

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

相対位置フィールド名長さ(単位:バイト)属性値の設定元内容
32643264
00列ID1の定義情報アドレス48void*pdrorg列ID1の列定義情報のアドレスが設定されます。
48列ID2の定義情報アドレス48void*pdrorg列ID2の列定義情報のアドレスが設定されます。
(n-1)×4(n-1)×8列IDnの定義情報アドレス48void*pdrorg列IDnの列定義情報のアドレスが設定されます。
(凡例)
32:32ビットモードのHiRDBの相対位置,及び長さを示します。
64:64ビットモードのHiRDBの相対位置,及び長さを示します。
注1
先頭アドレスは,32ビットモードのHiRDBの場合は4バイトのバウンダリ,64ビットモードのHiRDBの場合は8バイトのバウンダリを保証します。
注2
列定義情報アドレスリストの内容は,列の定義順に連続して渡します。

表8-32 列定義情報領域の内容

相対位置フィールド名長さ(単位:バイト)属性値の設定元内容
32643264
00列名長22shortpdrorg列名の長さが設定されます。
22列名3030charpdrorg列名が設定されます。
3232列ID22shortpdrorg列のIDが設定されます。
3434予備111
3535データ型11unsigned charpdrorg列のデータ型が設定されます。各データ型のデータコードとデータ値のバウンダリについては,表8-35を参照してください。
3636定義長22shortpdrorg列の定義長が設定されます。列の定義長領域の長さと内容については,表8-34を参照してください。
3838繰り返し回数22shortpdrorg列の繰り返し回数が設定されます。
4040BLOB長,又はBINARY長88int[2]pdrorg列のデータ型が長大データ型,又はBINARY型の場合に設定されます。上位4バイトには0,下位4バイトには長大データ型の定義長がバイト単位で設定されます。
4848パラメタ数22shortpdrorg抽象データ型の場合,該当するunld_func文の関数の数(パラメタ数)が設定されます。なお,次の場合は,0が設定されます。
  • 列のデータ型が抽象データ型以外の場合
  • unld_func文を指定していない抽象データ型の場合
5050予備266charpdrorg予備領域
5656拡張アドレス48void*pdrorg抽象データ型逆生成パラメタ情報の先頭アドレスが設定されます。なお,パラメタ数が0の場合は,0が設定されます。
6064予備36464charpdrorg予備領域
(凡例)
32:32ビットモードのHiRDBの相対位置,及び長さを示します。
64:64ビットモードのHiRDBの相対位置,及び長さを示します。
-:該当する内容はありません。
先頭アドレスは,32ビットモードのHiRDBの場合は4バイトのバウンダリ,64ビットモードのHiRDBの場合は8バイトのバウンダリを保証します。

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

相対位置フィールド名長さ(単位:バイト)属性値の設定元内容
0パラメタ番号2shortpdrorgパラメタ番号(1が先頭)
2データ型1unsigned charpdrorgパラメタのデータ型が設定されます。各データ型のデータコードとデータ値のバウンダリについては,表8-35を参照してください。
3予備13charpdrorg予備領域
6定義長2shortpdrorgパラメタの定義長が設定されます。列の定義長領域の長さと内容については,表8-34を参照してください。
8BLOB長,又はBINARY長8int[2]pdrorgパラメタのデータ型が長大データ型,又はBINARY型の場合,BLOB長が設定されます。上位4バイトには0,下位4バイトには長大データ型の定義長がバイト単位で設定されます。
16予備2112charpdrorg予備領域
注1
先頭アドレスは,32ビットモードのHiRDBの場合は4バイトのバウンダリ,64ビットモードのHiRDBの場合は8バイトのバウンダリを保証します。
注2
抽象データ型逆生成パラメタ情報領域の内容は,unld_func文で指定した関数(パラメタ)の順に連続して渡します。

表8-34 列の定義長領域の長さと内容

データ型領域長内容
DECIMAL,LARGE DECIMAL,
INTERVAL YEAR TO DAY,及び
INTERVAL HOUR TO SECOND
上位1バイト定義で指定した精度です。
下位1バイト定義で指定した位取りです。
TIMESTAMP(p)2バイト7+↑p/2↑
BLOB,抽象データ型,及びBINARY2バイト値は保証されません。
上記以外2バイト定義長です。

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

データ型データコード(16進数)バウンダリ(単位:バイト)
非ナル値制約指定なし非ナル値制約指定あり
MVARCHARA1A02
MCHARA5A4
NVARCHARB1B02
NCHARB5B4
VARCHARC1C02
CHARC5C4
FLOATE1E08
SMALLFLTE3E24
DECIMALE5E4
INTEGERF1F04
SMALLINTF5F42
INTERVAL YEAR TO DAY6564
DATE7170
TIME7978
INTERVAL HOUR TO SECOND6F6E
TIMESTAMP7D7C
BINARY91904
BLOB93924
抽象データ型抽象データ型パラメタのアドレスリスト838232ビットモードのHiRDBの場合は4,64ビットモードのHiRDBの場合は8
パラメタのデータパラメタの各データ型に従います。
(凡例)-:アドレスのバウンダリを調整しません。

表8-36 データアドレスリストの内容

相対位置フィールド名長さ(単位:バイト)属性値の設定元内容
32643264
00列ID1のデータ格納アドレス48void*pdrorg列ID1のデータのアドレスが設定されます。
48列ID2のデータ格納アドレス48void*pdrorg列ID2のデータのアドレスが設定されます。
(n-1)×4(n-1)×8列IDnのデータ格納アドレス48void*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-37 更新後データアドレスリストの内容

相対位置フィールド名長さ(単位:バイト)属性値の設定元内容
32643264
00列ID1のデータ格納アドレス48void*UOC列ID1のデータのアドレスを設定します。
48列ID2のデータ格納アドレス48void*UOC列ID2のデータのアドレスを設定します。
(n-1)×4(n-1)×8列IDnのデータ格納アドレス48void*UOC列IDnのデータのアドレスを設定します。
(凡例)
32:32ビットモードのHiRDBの相対位置,及び長さを示します。
64:64ビットモードのHiRDBの相対位置,及び長さを示します。
注1
先頭アドレスは,32ビットモードのHiRDBの場合は4バイトのバウンダリ,64ビットモードのHiRDBの場合は8バイトのバウンダリを保証してください。
注2
データ更新後のデータアドレスリストは,列の定義順に連続した領域で設定してください。
注3
データのアドレス値として,データアドレスリストのデータ格納アドレスを設定してもかまいません。ただし,データ値は更新しないでください。
注4
データのアドレスは,バウンダリを保証しなくてもかまいません。
注5
列定義で非ナル値制約指定なしの列の列値を,ナル値に変更する場合は0を設定してください。非ナル値制約指定有無によるデータ変更可否を次に示します。
列の属性更新前のデータ更新後のデータ
非ナル値ナル値
非ナル値制約指定なしナル値
非ナル値
非ナル値制約指定あり非ナル値×
(凡例)
○:変更できます。
×:変更できません。

(2) データ値の形式

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

(a) INTEGER又はSMALLINT

[図データ]

(b) FLOAT又はSMALLFLT

[図データ]

(c) DECIMAL

[図データ]

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

[図データ]

(e) NCHAR又はNVARCHAR

[図データ]

(f) DATE

[図データ]

(g) TIME

[図データ]

(h) INTERVAL YEAR TO DAY

[図データ]

(i) INTERVAL HOUR TO SECOND

[図データ]

(j) TIMESTAMP

[図データ]

(k) BINARY

[図データ]

(l) BLOB

[図データ]

(m) 抽象データ型

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

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

[図データ]

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

相対位置フィールド名長さ(単位:バイト)属性値の設定元内容
0第1パラメタのデータのアドレス4void*UOC第1パラメタのデータのアドレスが設定されます。
4第2パラメタのデータのアドレス4void*UOC第2パラメタのデータのアドレスが設定されます。
(n-1)×4第nパラメタのデータのアドレス4void*UOC第nパラメタのデータのアドレスが設定されます。
注1
先頭アドレスは,4バイトのバウンダリを保証します。
注2
パラメタのデータの開始アドレスは,データ型ごとに設定したバウンダリで調整したアドレスが設定されます。
注3
抽象データ型パラメタのアドレスリストの内容は,unld_func文で指定した関数(パラメタ)の順に連続して渡します。
(n) 繰返し列の場合

[図データ]