8.3.4 送信データUOCで使う関数の文法
送信データUOCは,C言語でプログラミングします。抽出側Datareplicatorには,送信データUOCを作成するときに使う関数を備えています。
送信データUOCで使える関数名と機能の概要を次の表に示します。
関数名 |
機能 |
---|---|
hde_usendcheck () (送信データの判定) |
送信データ(更新情報)を受け取って,チェック結果を格納します。ユーザは,チェックする内容を指定して,結果を返します。 |
(1) hde_usendcheck(送信データの判定)
送信データUOCで使う関数は,hde_usendcheck()です。一つの抽出側Datareplicatorシステム内に1個のUOC関数を作成できます。
(a) 関数の形式
#include<hde_usend.h> int hde_usendcheck( HDE_EXT_ENVINFO *envinfo, /*(IN) 送信環境情報ブロック*/ HDE_EXT_TBLINFO *tblinfo, /*(IN) 抽出表情報ブロック */ HDE_EXT_COLINFO *colinfo, /*(IN) 抽出データ情報ブロック*/ int *status ); /*(OUT) 送信UOCステータス */
(b) パラメタの説明
パラメタの内容を次に示します。
関数の構造体は,送信データUOCのヘッダファイルで定義しています。構造体の設定者が呼び出し元の領域は,更新しないでください。ヘッダファイルについては,「表8-42 送信データUOCのヘッダファイルの一覧」を参照してください。
-
HDE_EXT_ENVINFO
送信データUOCの環境情報を格納するブロックです。
HDE_EXT_ENVINFOの内容を次の表に示します。
表8‒35 HDE_EXT_ENVINFOの内容 メンバ名
長さ(バイト)
属性
領域名
設定者
内容
sendid
9
char
送信先識別子
呼び出し元
該当する更新情報の送信先を示す識別子(NULLで終了)
hdeid
1
unsigned char
抽出側Datareplicator識別子
呼び出し元
抽出システム定義hdeidオペランドの指定値
識別子2文字は,1バイトで表現しています。
(例)c1 → 0xC1
hdsid
1
unsigned char
反映システム識別子
呼び出し元
送信環境定義sendhdsidオペランドの指定値
識別子2文字は,1バイトで表現しています。
(例)c1 → 0xC1
dsid
1
unsigned char
データ連動識別子
呼び出し元
送信環境定義dsidオペランド,又は抽出環境定義のdsidオペランドの指定値(送信環境定義dsidオペランドが優先)
識別子2文字は,1バイトで表現しています。
(例)c1 → 0xC1
reserve1
20
char
予備
呼び出し元
予備(0x00...00)
-
HDE_EXT_TBLINFO
HDE_EXT_TBLINFOの内容を次の表に示します。
表8‒36 HDE_EXT_TBLINFOの内容 メンバ名
長さ(バイト)
属性
領域名
設定者
内容
tableid
4
int
抽出表ID
呼び出し元
該当する更新情報の抽出表ID
tablename
31
char
抽出表名
呼び出し元
該当する更新情報の抽出表名(NULLで終了)
schemaname
9
char
認可識別子
呼び出し元
該当する更新情報の抽出表の認可識別子(NULLで終了)
exttime
8
char
抽出時間
呼び出し元
該当する更新情報の抽出時間
10進符号なしパック形式(YYYYMMDDhhmmss00)で出力します。
YYYY:西暦年
MM:月
DD:日
hh:時
mm:分
ss:秒
extkind
1
unsigned char
更新種別
呼び出し元
更新したSQL種別
- INSERT:
-
HDE_EXT_INSERT (0x01)
- UPDATE:
-
HDE_EXT_UPDATE (0x02)
- DELETE:
-
HDE_EXT_DELETE (0x03)
- PURGE:
-
HDE_EXT_PURGE (0x04)
apkind
1
unsigned char
ループバック情報
呼び出し元
ループバック情報
- 0x00:
-
UAPからの更新情報
- 0x01:
-
反映側Datareplicator(hdesqleオペランド)からの更新情報
reserve1
11
char
予備
呼び出し元
予備(0x00...00)
-
HDE_EXT_COLINFO
HDE_EXT_COLINFOの内容を「表8-37 HDE_EXT_COLINFOの内容」に,HDE_EXT_COLINFOから参照できるHDE_EXT_DATAINFOの内容を「表8-38 HDE_EXT_DATAINFOの内容」に示します。
HDE_EXT_TBLINFOのextkindの値がHDE_EXT_PURGEのときは,HDE_EXT_COLINFOの内容はNULL値になって参照できません。
表8‒37 HDE_EXT_COLINFOの内容 メンバ名
長さ(バイト)
属性
領域名
設定者
内容
colnum
4
int
列情報数
呼び出し元
該当する更新情報にある抽出列の数(HDE_EXT_DATAINFOのエントリ数)
*datainfo
4
HDE_EXT_DATAINFO *
抽出データ情報の先頭アドレス
呼び出し元
抽出データ情報(HDE_EXT_DATAINFO)の配列の先頭アドレス
reserve
8
char
予備
呼び出し元
予備
表8‒38 HDE_EXT_DATAINFOの内容 メンバ名
長さ(バイト)
属性
領域名
設定者
内容
colid
4
int
抽出列ID
呼び出し元
抽出列ID
colname
31
char
抽出列名
呼び出し元
抽出列名(NULLで終了)
coltype
1
unsigned char
列データ型
呼び出し元
抽出列のデータ型
列データ型の一覧については,「表8-40 列データ型の一覧」を参照してください。
colopt
1
unsigned char
列オプション
呼び出し元
抽出列のオプション
- マッピングキー:
-
HDE_EXT_MAPPINGKEY (0x01)
- 繰返し列:
-
HDE_EXT_MCOL (0x02)
charset
1
unsigned char
文字集合種別
呼び出し元
該当する列の文字集合種別
- 文字集合指定なし:
-
HDE_CSET_DEFAULT 0x00
- 文字集合指定あり(EBCDIK):
-
HDE_CSET_EBCDIK 0x01
reserve1
2
char
予備
呼び出し元
予備(0x00...00)
bf_datalen
4
int
更新前の列データ長※1
呼び出し元
抽出列の更新前の列データ長
- 0:
-
0バイトデータ,又はNULL値を示します。
- −1:
-
更新前の列データが未使用であることを示します。
bf_dataptr
4
union※2
更新前の列データ※1
呼び出し元
抽出列の更新前の列データへの先頭アドレス
- 0:
-
NULL値を示します。
- −1:
-
更新前の列データが未使用であることを示します。
af_datalen
4
int
更新後の列データ長※1
呼び出し元
抽出列の更新後の列データ長
- 0:
-
0バイトデータ,又はNULL値を示します。
- −1:
-
更新後の列データが未使用であることを示します。
af_dataptr
4
union※2
更新後の列データ※1
呼び出し元
抽出列の更新後の列データへの先頭アドレス
- 0:
-
NULL値を示します。
- −1:
-
更新後の列データが未使用であることを示します。
precision
2
short
精度
呼び出し元
coltypeがHDE_T_DECの場合に精度(全体のけた数)が設定されます。それ以外の場合には0が設定されます。
scale
2
short
位取り
呼び出し元
coltypeがHDE_T_DECの場合に位取り(小数点以下のけた数)が設定されます。それ以外の場合には0が設定されます。
sec_preci
2
short
小数秒のけた数
呼び出し元
coltypeがHDE_T_TIMESTAMPの場合に小数秒のけた数が設定されます。それ以外の場合には0が設定されます。
reserve2
2
char
予備
呼び出し元
予備(0x00...00)
- 注※1
-
更新前データと更新後データの組み合わせの一覧を「表8-39 更新前データと更新後データの組み合わせ」に示します。DATAINFOの並び(配列)については,INSERTのときにはカラムIDでソート,UPDATE,DELETEのときには抽出順になります。
- 注※2
-
該当する抽出列の属性がCHAR,又はVARCHARの場合,渡されるデータは該当する抽出列の文字集合となります。
表8‒39 更新前データと更新後データの組み合わせ データ種別
更新前
データ長
更新前
データ
更新後
データ長
更新後
データ
INSERT
nバイトデータ
−1
−1
n
addr
0バイトデータ
−1
−1
0
addr
NULLデータ
−1
−1
0
0
非マッピングキーのUPDATE
nバイト
データ
から
nバイトデータへ
−1
−1
n
addr
0バイトデータへ
−1
−1
0
addr
NULLデータへ
−1
−1
0
0
0バイト
データ
から
nバイトデータへ
−1
−1
n
addr
0バイトデータへ
−1
−1
0
addr
NULLデータへ
−1
−1
0
0
NULL
データ
から
nバイトデータへ
−1
−1
n
addr
0バイトデータへ
−1
−1
0
addr
NULLデータへ
−1
−1
0
0
マッピングキーのUPDATE
nバイト
データ
から
nバイトデータへ
n
addr
n
addr
0バイトデータへ
n
addr
0
addr
NULLデータへ
n
addr
0
0
0バイト
データ
から
nバイトデータへ
0
addr
n
addr
0バイトデータへ
0
addr
0
addr
NULLデータへ
0
addr
0
0
NULL
データ
から
nバイトデータへ
0
0
n
addr
0バイトデータへ
0
0
0
addr
NULLデータへ
0
0
0
0
DELETE※
nバイトデータ
n
addr
−1
−1
0バイトデータ
0
addr
−1
−1
NULLデータ
0
0
−1
−1
- 注※
-
渡されるデータはマッピングキーのデータだけです。可変長データの同値更新,又は非更新の場合,変更前後のデータ情報はすべて「−1」になります。
列データ型の一覧を次の表に示します。
列データ型 |
ニモニック |
コード |
---|---|---|
INTEGER |
HDE_T_INT |
0xF1 |
SMALLINT |
HDE_T_SINT |
0xF5 |
LARGE DECIMAL |
HDE_T_DEC |
0xE5 |
FLOAT |
HDE_T_FLT |
0xE1 |
DOUBLE PRECISION |
HDE_T_DBL |
0xE1 |
SMALL FLOAT |
HDE_T_SFLT |
0xE3 |
REAL |
HDE_T_REAL |
0xE3 |
CHARACTER |
HDE_T_CHAR |
0xC5 |
VARCHAR |
HDE_T_VCHAR |
0xC1 |
NCHAR |
HDE_T_NCHAR |
0xB5 |
NVARCHAR |
HDE_T_NVCHAR |
0xB1 |
MCHAR |
HDE_T_MCHAR |
0xA5 |
MVARCHAR |
HDE_T_MVCHAR |
0xA1 |
DATE |
HDE_T_DATE |
0x71 |
TIME |
HDE_T_TIME |
0x79 |
TIMESTAMP |
HDE_T_TIMESTAMP |
0x7D |
INTERVAL YEAR TO DAY |
HDE_T_YTD |
0x65 |
INTERVAL HOUR TO SECOND |
HDE_T_HTS |
0x6F |
ADT(抽象データ型) |
HDE_T_ADT |
0x83 |
BLOB |
HDE_T_BLOB |
0x93 |
BINARY |
HDE_T_BINARY |
0x91 |
-
int *status
UOCの状態コードを示します。UOC内でエラーが起こったときの状態を表示するために使います。関数の呼び出し時は,0で初期化して渡されます。
ここに設定されたコードは,戻り値がHDE_EXT_SEND(1),HDE_EXT_NOSEND(0)以外のときに出力されるエラーメッセージKFRB02052-Eの埋字として表示されますが,設定された値は送信プロセスの動作には影響しません。
(c) 戻り値
送信データUOC関数では,呼び出し元にリターンするときに戻り値を設定してください。
設定できる送信データUOCからの戻り値を次の表に示します。
(2) 送信データUOCで使うヘッダファイル
送信データUOCで使うヘッダファイルは,次に示すディレクトリに格納してあります。
UNIX版の場合:/opt/hirdbds/include/
Windows版の場合:Datareplicatorをインストールしたディレクトリ\include\
送信データUOCのヘッダファイルを次の表に示します。
ファイル名 |
内容 |
送信データUOCに関連するメンバ |
---|---|---|
送信データUOCの構造体及びニモニックコード |
・HDE_EXT_ENVINFO ・HDE_EXT_TBLINFO ・HDE_EXT_COLINFO ・HDE_EXT_DATAINFO ・データ型のニモニック ・データアドレスのニモニック |