8.3.5 送信データUOCを作成するときの注意
送信データUOC実行時には,環境変数SHLIB_PATH(Linux版の場合はLD_LIBRARY_PATH,AIX版の場合はLIBPATH)に共用ライブラリファイル(libhdesuoc.so又はlibhdesuoc.exp)が格納されているディレクトリパスを指定してください。
環境変数SHLIB_PATH(Linux版の場合はLD_LIBRARY_PATH,AIX版の場合はLIBPATH)が指定されていない場合や,環境変数で指定したディレクトリパス下に共用ライブラリファイルが存在しない場合は,送信データUOCを使わない通常の反映処理が実行されます。
(1) シグナルの制限
-
送信データUOC関数内では,シグナルの操作をしないでください。
-
プロセスを制御する関数(exit(), abort() など)は使わないでください。
-
送信データUOC内で,HDE_EXT_DATAINFO中の更新前の列データ,更新後の列データのアドレスでfree()を実行しないでください。
(2) ファイルの制限
送信データUOC関数内で操作できるファイルは,ユーザ独自のファイルだけ(UOC関数でオープンしたファイルだけ)です。ファイルの規則を次に示します。
-
標準入力,標準出力,標準エラー出力は使わないでください。
-
自らがオープンしたファイル以外をread,write,closeしないでください。
-
HiRDBとDatareplicatorのファイルを操作しないでください。
-
送信データUOCに到着したデータを加工しないでください。
-
送信データUOC内で確保した資源は,次回の送信データUOCの呼び出しに引き継げません。
(3) 共用メモリの制限
共用メモリは,Datareplicatorやほかのシステムと同じ共用メモリを使わないでください。
(4) データ型の制限
次のデータ型の列は,送信データUOCでは扱えません。
-
抽象データ型(SGMLTEXT,FREEWORD,XML)
-
追加更新をしているBLOB型及びBINARY型
-
後方削除更新をしているBLOB型及びBINARY型
(5) SQLの実行の制限
送信データUOC関数内,又は送信データUOC関数の延長で,SQLを実行しないでください。このようにSQLを実行すると,Datareplicatorのトランザクション管理が不正になることがあります。
(6) そのほかの制限
-
送信文字コードをEBCDIK指定にした場合でも,渡されるデータはEBCDIK変換前の文字コードで渡します。
-
同じ送信先に対する処理でも,複数のプロセスに分けて処理されることを考慮して送信データUOCを作成してください。
-
引数で渡す表ID,列IDはhdeprepコマンド実行時IDが渡されます。そのため,UOCの中でこれらのIDを使っているときに,hdeprepコマンド以降に表を再作成するとUOCの修正も必要になります。