データべース作成ユティリティとUOC間の連絡は,インタフェース領域を使用して情報の入出力をします。
この領域はデータべース作成ユティリティが確保します。UOCは,関数の第1引数にこの領域のアドレスを受け取って参照,更新をします。
UOCインタフェース領域の構造を図5-29及び図5-30に示します。また,UOCインタフェース領域の内容を表5-51に示します。
図5-29 UOCインタフェース領域の構造(32ビットモードの場合)
![[図データ]](figure/zu050440.gif)
図5-30 UOCインタフェース領域の構造(64ビットモードの場合)
![[図データ]](figure/zu050441.gif)
表5-51 UOCインタフェース領域の内容
相対位置 | フィールド名 | 長さ(単位:バイト) | 属性 | 値の設定元 | 内容 |
---|
32 | 64 | 32 | 64 |
---|
0 | 0 | アイキャッチャ | 8 | 8 | char | pdload | インタフェース領域(’*UOCINF*’) |
8 | 8 | 実行中プログラム | 4 | 4 | long | pdload | 制御が渡っているプログラム 0:pdload 1:UOC |
12 | 12 | 呼び出し種別 | 4 | 4 | long | pdload | UOCに対する処理要求種別
- o:開始要求
- 処理開始の準備要求をします。
- 入力デ-タファイルのオープンなど,処理の開始準備をします。
- e:編集要求※1
- 行データの編集要求をします。
- (1)の方法では,pdloadが入力した1行分のデータが入力バッファアドレスの指す入力バッファに設定されています。
- (2)の方法では,UOCが入力デ-タファイルの読み込みをします。
- その後,(1),(2)共にデータを編集した結果を,編集バッファアドレスの指す編集バッファに設定します。
- このコールは,データがなくなるか,又はUOCからのリターンコードが0,4以外になるまで繰り返します。
- c:終了要求
- 処理の終了要求をします。
- 入力デ-タファイルのクローズなど,終了処理をします。
- (1)の方法ではpdloadが入力するデータがなくなった場合,(2)の方法ではUOCからリターンコード16を受け取った場合に要求をします。
- t:停止要求
- 処理の強制終了要求をします。
- pdload側でエラーが発生した場合,又はUOCからリターンコード0,4,16以外を受け取った場合に,終了要求の代わりにこのコールをします。
開始要求をした場合,正常時は終了要求,異常時は停止要求をします。終了要求又は停止要求以降は,UOCがコールされることはありません。 |
16 | 16 | 認可識別子の長さ | 2 | 2 | short | pdload | 表の所有者名の長さ |
18 | 18 | 認可識別子 | 30 | 30 | char | pdload | 表の所有者名 |
48 | 48 | 表識別子の長さ | 2 | 2 | short | pdload | 表の名称の長さ |
50 | 50 | 表識別子 | 30 | 30 | char | pdload | 表の名称 |
80 | 80 | 入力データ長※2 | 4 | 8 | long | pdload | (1) バイナリ形式及び拡張DAT形式の入力データファイルの場合,入力バッファ※3に設定したデータの長さ(全長)を設定します。 (2) 無視されます。 |
84 | 88 | 入力バッファのアドレス | 4 | 8 | void* | pdload | (1) pdloadが入力したデータを格納するバッファのアドレスを設定します。 (2) 無視されます。 |
88 | 96 | 編集データ長※2※5 | 4 | 8 | long | UOC | バイナリ形式及び拡張DAT形式の入力デ-タファイルの場合,編集バッファ※4に設定したデータの長さ(全長)を設定します。 (1) データを格納しない場合は-1を設定します。 |
92 | 104 | 編集バッファのアドレス | 4 | 8 | void* | UOC | UOCで編集したデータを格納するバッファのアドレス |
96 | 112 | ユーザパラメタのアドレス | 4 | 8 | void* | pdload | srcuoc文のparamオペランドに指定した文字列のアドレスを設定します。paramオペランドを省略した場合はナル値が設定されます。 |
100 | 120 | システムが使用する情報 | 4 | 8 | void* | pdload | システムが使用する情報(UOC側では使用しないこと) |
104 | 128 | 予備 | 16 | 16 | char | pdload | 予備領域(UOC側では使用しないこと)。 なお,最初の1バイトはシステムが使用する領域です。 |
120 | 144 | リターンコード | 4 | 4 | long | UOC | UOCの処理結果を通知するリターンコードです。pdloadから制御を受け取ったUOCは,次の基準でリターンコードを戻してください。この領域はpdloadがUOCをコールするごとにクリア(-1を設定)しているので,毎回設定する必要があります。
- 0:
- 開始・終了要求に対する処理が正常に実行された場合,又は編集要求に対して編集バッファに1行分のデータを用意できた場合に設定します。
- 4:
- デバックなどで,正常時もメッセージを出力したい場合に設定します。
- 内容は0と同じです。
- リターンコードに4を設定した場合,メッセージは3回まで出力されます。メッセージが3回出力された後に4を設定しても無視され,メッセージは出力されません。
- 8:
- UOCの処理中にエラーが発生した場合,それまでの入力処理を有効にして(コミットして)処理を打ち切るときに設定します。
- ただし,HiRDB側で内部エラーが発生した場合は,ロールバックされます。コミットされたか,又はロールバックされたかについては,メッセージログに出力されたメッセージで確認できます。
- 16:
- UOCが入力デ-タファイルを読み込む場合,データがなくなったことをpdloadに通知するときに設定します。
- また,pdloadが入力デ-タファイルを読み込む場合に,今回受け取ったデータ以降のデータを受け取らないときにも指定できます。
- このリターンコードを受け取ると,pdloadは終了処理をします。
- 20:
- UOCの処理中にエラーが発生した場合,それまでの入力処理を無効にして(ロールバックして)処理を打ち切るときに設定します。
リターンコードに0,16以外の値を設定すると,メッセージ埋め込み領域の内容を標準出力及びメッセージログに出力します。メッセージは,末尾に(¥0)を設定して131バイト以内の文字列としてください。 |
124 | 148 | メッセージ埋め込み領域 | 132 | 132 | char | UOC | 標準出力及びログに出力するメッセージの格納領域 |
- (凡例)
- 32:32ビットモードのHiRDBの相対位置,及び長さを示します。
- 64:64ビットモードのHiRDBの相対位置,及び長さを示します。
- 注
- 内容の(1),(2)の意味を次に示します。
- (1):pdloadが入力デ-タファイルを入力する場合
- (2):UOCが入力デ-タファイルを入力する場合
- 注※1
- -eオプション指定時は,エラーデータを検知するとUOCの処理も打ち切ります。また,pdloadが入力データファイルを入力する場合は次のようになります。
- -rオプションが指定されている場合は,指定した行データまでは渡されません。
- パーソナルコンピュータで作られたDAT形式ファイルなどで,改行記号(¥n)の前に復帰記号(¥r)があるデータは,復帰記号は削除された形で渡されます。
- pdrorgが出力する-Wオプション指定のバイナリ形式の入力デ-タファイルの場合,LOB列及びBINARY列の編集はできません。
- バイナリ形式の入力デ-タファイルを処理する場合,可変長文字列の長さが不正なデータは渡されません。
- 注※2
- 該当するデータを入力対象外にする場合に-1を設定します。
- 64ビットモードのHiRDBの場合,処理上有効なデータ長の最大値は2ギガ-1バイトです。
- 注※3
- 入力バッファアドレスのフィールドを指す領域を,入力バッファと呼びます。入力バッファはpdloadが入力デ-タファイルを読み込む場合に,pdloadが確保します。入力バッファには,pdloadが入力したデータが1行ごとに格納されます。入力バッファの形式は次のようになります。
- ・DAT形式の入力デ-タファイルの場合
- テキストデータを改行記号まで読み込んだものが,そのまま格納されます。末尾は改行記号(¥n)+ナル文字(¥0)となります。最後尾のナル文字以降を参照,更新しないでください。
- ・拡張DAT形式の入力デ-タファイルの場合
- 囲み文字で囲まれていないナル文字又は改行記号までのテキストデータを読み込んだものが,そのまま格納されます。格納されたデータの長さは入力データ長に設定されます。入力データ長に設定された長さ以上の領域を参照,更新しないでください。
- ・バイナリ形式の入力デ-タファイルの場合
- 表定義から計算した行長分のデータが格納されます。格納されたデータの長さは入力データ長に設定されます。入力データ長に設定された長さ以上の領域を参照,更新しないでください。
- ・pdrorgが出力した入力デ-タファイルの場合
- 入力データ長には,FIX表の場合はデータ部だけの長さ,非FIX表の場合はオフセット部とデータ部の合計値が設定されます。入力データ長に設定された長さ以上の領域を参照,更新しないでください。なお,LOB列及びBINARY列はUOCでは扱えないため,LOB列及びBINARY列がある表は,pdrorgのUOCで編集してください。
- ・固定長データ形式の入力データファイルの場合
- 列構成情報ファイルに指定した列情報から計算された,行長分のデータが格納されます。したがって,テキストファイルの場合は,改行記号(¥n)及び復帰記号(¥r)が付いたままの形となります。
- 注※4
- 編集バッファアドレスのフィールドを指す領域を,編集バッファと呼びます。編集バッファはUOCが確保します。ただし,pdloadが入力デ-タファイルを読み込む場合,設定されたデータ長を超えて入力バッファの更新をしないときには,入力バッファをそのまま編集バッファとして利用できます。バイナリ形式の場合,編集データ長のフィールドにデータの長さを設定して,編集バッファの何バイト目までがデータなのかを指定します。DAT形式の場合,長さを設定する必要はありませんが,編集バッファのデータの末尾は改行記号(¥n)+ナル文字(¥0)とします。
- 注※5
- バイナリ形式及び拡張DAT形式の入力データファイルの場合,編集バッファに用意したデータの長さを指定してください。
- 拡張DAT形式の入力データファイルの場合,編集したデータの長さがsource文のmaxreclenオペランドの指定値を超えないようにしてください。そのほかの形式の入力データファイルの場合,初期値の0にしてください。