反映情報編集UOCは,C言語を使ってプログラミングします。反映側Datareplicatorには,反映情報編集UOCを作成するときに使う関数を備えています。
反映情報編集UOCで使える関数名と機能の概要を次の表に示します。
表8-3 反映情報編集UOCで使える関数と機能の概要
関数名 | 機能 |
---|---|
hds_ubegin() (編集開始指示) | 反映情報の編集を開始することを指示します。ユーザは,反映側HiRDBへの接続処理又は環境の初期設定の処理を実行します。 |
hds_uedit() (編集・加工指示) | 反映情報の編集・加工及び同期点処理を指示します。ユーザは,反映情報を編集・加工してSQLを発行したり一般ファイルへ出力したりします。 |
hds_uend() (編集終了指示) | 反映情報の編集を終了することを指示します。ユーザは,反映側HiRDBからの切り離し処理又は環境の終了処理を実行します。 |
#include<hds_ucommon.h> #include<hds_ureflect.h> int hds_ubegin(UINTERFACE_BLK *インタフェースブロック名, long *ステータス); |
表8-4 インタフェースブロック(UINTERFACE_BLK)の内容
メンバ名 | 長さ(バイト) | 属性 | 領域名 | 設定者 | 内容 |
---|---|---|---|---|---|
auth_id | 8 | char | 認可識別子 | 呼び出し元 | 反映システム定義で指定した接続認可識別子 |
password | 30 | char | パスワード | 呼び出し元 | 反映システム定義で指定したパスワード |
exsysid | 2 | char | 抽出側Datareplicator識別子 | 抽出元 | 抽出側Datareplicatorの抽出システム定義で指定した抽出側Datareplicator識別子。小文字の16進数字が文字列として設定されます。 XDM/DSとの連動時は,'00'が設定されます。 |
repid1 | 2 | char | 識別子1 | 呼び出し元 | 反映システム定義で指定したデータ連動識別子 |
repid2 | 2 | char | 識別子2 | 呼び出し元 | 反映システム定義で指定した反映側Datareplicator識別子 |
*inherinf1 | 4 | char* | 引き継ぎ情報1 | 呼び出し先 | hds_uedit()関数とhds_uend()関数に引き継ぐ領域のアドレス |
inherinf2 | 4 | long | 引き継ぎ情報2 | 呼び出し先 | hds_uedit()関数とhds_uend()関数に引き継ぐ情報 |
stopinf | 4 | long | 終了モード | 呼び出し元 | UOC終了時の終了モード この領域は,hds_uend()関数の呼び出し時だけ有効です。
|
呼び出し元に戻るときに戻り値を設定します。設定できる戻り値を次の表に示します。
表8-5 hds_ubegin()からの戻り値
コード | 状態 | ニモニック | 呼ぴ出し元の処置 |
---|---|---|---|
0 | 正常終了 | HDS_RET_NORM | 処理を続行します。 |
4 | 軽度(継続できるレベル)のエラー検知 | HDS_RET_WARN | メッセージを出力します。処理は続行します。 |
0,4以外 | 重度(継続できないレベル)のエラー検知 | HDS_RET_ERR | メッセージを出力します。処理は中止し,プロセスを終了します。 |
抽出側Datareplicatorの送信環境定義のnsndidxxxオペランド(xxxは001~256の整数)に,送信抑止受信元識別子を指定している場合,HiRDBのCONNECT処理の直前に,HiRDBの環境変数である$PDCLTAPNAMEに,hdssqleで始まり抽出側Datareplicator識別子で終わる20バイト以内の文字列を設定してください。
抽出側Datareplicator識別子として設定される文字列は,インタフェースブロック内に設定される文字列と同じです(2バイトの16進数字の文字列)。
#include<hds_ucommon.h> #include<hds_ureflect.h> int hds_uedit(UINTERFACE_BLK *インタフェースブロック名, UREFLECT_BLK *反映制御ブロック名, UDATA_BLK *キー情報ブロック名, UDATA_BLK *反映データブロック名, long *ステータス); |
表8-6 反映制御ブロック(UREFLECT_BLK)の内容
メンバ名 | 長さ(バイト) | 属性 | 領域名 | 設定者 | 内容 |
---|---|---|---|---|---|
updkind | 8 | char | 更新種別 | 呼び出し元 | 抽出側DBを更新するときの種別。次に種別を示します。種別を示す文字列は,8バイト固定です。8バイトに満たない部分は,空白で埋められます。
|
auth_id | 30 | char | 認可識別子 | 呼び出し元 | 抽出側DBを更新するときの認可識別子 |
tbl_id | 30 | char | 表識別子 | 呼び出し元 | 抽出側DBを更新するときの表識別子 |
upd_date | 4 | char | 更新日付 | 呼び出し元 | 抽出側DBを更新するときの日付(更新情報をジャーナルに出力した日付)。日付は10進符号なしパック形式(YYYYMMDD)で出力します。
|
upd_time | 4 | char | 更新時刻 | 呼び出し元 | 抽出側DB更新時の時刻(更新情報をジャーナルに出力した時刻)時刻は10進符号なしパック形式(HHMMSSTT)で出力します。
|
uapname | 8 | char | 抽出側のUAP名 | 呼び出し元 | 抽出側DBを更新するときのユーザアプリケーションプログラムの名称 |
extsysid | 4 | char | 抽出側DBのシステムID | 呼び出し元 |
|
infflag1 | 1 | unsigned char | 予備領域1 | - | 予備 |
infflag2 | 1 | unsigned char | 予備領域2 | - | 予備 |
infflag3 | 1 | unsigned char | 予備領域3 | - | 予備 |
reserve1 | 1 | char | 予備領域4 | - | 予備 |
infflag4 | 4 | long | 予備領域5 | - | 予備 |
図8-4 UDATA_BLKとその関連構造
表8-7 UDATA_BLKの内容
メンバ名 | 長さ(バイト) | 属性 | 領域名 | 設定者 | 内容 |
---|---|---|---|---|---|
colnum | 4 | long | 列数 | 呼び出し元 | マッピングキーの列数又は反映データの列数が設定されます。 |
*colinfptr | 4 | UCOLUMN_BLK* | UCOLUMN_BLK*アドレス | 呼び出し元 | UCOLUMN_BLKのアドレスが設定されます。 |
表8-8 UCOLUMN_BLKの内容
メンバ名 | 長さ(バイト) | 属性 | 領域名 | 設定者 | 内容 |
---|---|---|---|---|---|
colname | 30 | char | 列名 | 呼び出し元 | 列の名前が設定されます。 |
coltype | 1 | unsigned char | 列データ型 | 呼び出し元 | 列のデータ型が設定されます。設定内容については,「表8-10 列データ型のニモニック」を参照してください。 |
coloption | 1 | unsigned char | 列オプション | 呼び出し元 | 列のオプションが設定されます。オプションの種類を次に示します。
|
elementnum | 4 | union | 繰返し列の有効要素番号 又は抽象データ型の数 | 呼び出し元 |
|
mltcolkind | 1 | unsigned char | 繰返し列の更新種別 | 呼び出し元 | 繰返し列の場合の更新種別を次に示します。更新種別がUPDATEのときだけ有効になります。
|
adtfunc | 1 | char | 抽象データ型の反映方式 | 呼び出し元 | 「0x01」で固定です。 |
charset | 1 | char | 文字集合種別 | 呼び出し元 | UOCに渡す列データの文字集合種別が設定されます。
|
reserve1 | 2 | char | 予備領域 | - | 予備 |
collen | 4 | long | 列データ長 | 呼び出し元 | 列のデータ長が設定されます。列オプションがNULLデータの場合,0が設定されます。 |
dataptr | 4 | union | データアドレス | 呼び出し元 | 列データのアドレスが設定されます。列オプションがNULLデータの場合,NULLポインタが設定されます。設定内容については,「表8-11 データアドレスのニモニック」を参照してください。 |
表8-9 USUBSTR_BLKの内容
メンバ名 | 長さ(バイト) | 属性 | 領域名 | 設定者 | 内容 |
---|---|---|---|---|---|
reserve1 | 4 | int | 内部情報1 | 呼び出し元 | 内部情報 |
data_len | 4 | int | 内部情報2 | 呼び出し元 | 内部情報 |
reserve2 | 4 | int | 予備領域1 | 呼び出し元 | 予備 |
substr_spos | 4 | unsigned int | SUBSTR開始位置 | 呼び出し元 | スカラ関数SUBSTR使用時の,切り出すデータ列の開始位置 |
reserve3 | 4 | int | 予備領域2 | 呼び出し元 | 予備 |
substr_len | 4 | unsigned int | SUBSTRデータ長 | 呼び出し元 | スカラ関数SUBSTR使用時の,切り出すデータ列の長さ |
reserve4 | 16 | char | 予備領域3 | 呼び出し元 | 予備 |
列データ型のニモニックを「表8-10 列データ型のニモニック」に,データアドレスのニモニックを「表8-11 データアドレスのニモニック」に示します。
表8-10 列データ型のニモニック
列データ型 | ニモニック | データコード |
---|---|---|
INTEGER | HDS_T_INT | (0xF1) |
SMALLINT | HDS_T_SINT | (0xF5) |
LARGE DECIMAL | HDS_T_DEC | (0xE5) |
FLOAT | HDS_T_FLT | (0xE1) |
DOUBLE PRECISION | HDS_T_DBL | (0xE1) |
SMALL FLOAT | HDS_T_SFLT | (0xE3) |
REAL | HDS_T_REAL | (0xE3) |
CHARACTER | HDS_T_CHAR | (0xC5) |
VARCHAR | HDS_T_VCHAR | (0xC1) |
NCHAR | HDS_T_NCHAR | (0xB5) |
NVARCHAR | HDS_T_NVCHAR | (0xB1) |
MCHAR | HDS_T_MCHAR | (0xA5) |
MVCHAR | HDS_T_MVCHAR | (0xA1) |
DATE | HDS_T_DATE | (0x71) |
TIME | HDS_T_TIME | (0x79) |
TIMESTAMP | HDS_T_TIMESTAMP | (0x7D) |
INTERVAL YEAR TO DAY | HDS_T_YTD | (0x65) |
INTERVAL HOUR TO SECOND | HDS_T_HTS | (0x6F) |
BLOB | HDS_T_BLOB | (0x93) |
BINARY | HDS_T_BINARY | (0x91) |
UNPACK | HDS_T_UNPACK | (0xFF) |
表8-11 データアドレスのニモニック
データ型 | ニモニック | アドレスタイプ |
---|---|---|
INTEGER | HDS_A_INT | long* |
SMALLINT | HDS_A_SINT | short* |
LARGE DECIMAL | HDS_A_DEC | char* |
FLOAT | HDS_A_FLT | double* |
DOUBLE PRECISION | HDS_A_DBL | double* |
SMALL FLOAT | HDS_A_SFLT | float* |
REAL | HDS_A_REAL | float* |
CHARACTER | HDS_A_CHAR | char* |
VARCHAR | HDS_A_VCHAR | char* |
NCHAR | HDS_A_NCHAR | char* |
NVARCHAR | HDS_A_NVCHAR | char* |
MCHAR | HDS_A_MCHAR | char* |
MVCHAR | HDS_A_MVCHAR | char* |
DATE | HDS_A_DATE | char* |
TIME | HDS_A_TIME | char* |
INTERVAL YEAR TO DAY | HDS_A_YTD | char* |
INTERVAL HOUR TO SECOND | HDS_A_HTS | char* |
BLOB | HDS_A_BLOB | char* |
UNPACK | HDS_A_UNPACK | char* |
TIMESTAMP | HDS_A_TIMESTAMP | char* |
BINARY | HDS_A_BINARY | char* |
SUBSTR演算後方削除更新ログ | HDS_A_SUBSTR | USUBSTR_BLK* |
呼び出し元に戻るときに戻り値を設定します。設定できる戻り値を次の表に示します。
表8-12 hds_uedit()からの戻り値
コード | 状態 | ニモニック | 呼び出し元の処置 |
---|---|---|---|
0 | 正常終了 | HDS_RET_NORM | 処理を続行します。 |
4 | 軽度(継続できるレベル)のエラー検知 | HDS_RET_WARN | メッセージを出力します。処理は続行されます。 |
0,4以外 | 重度(継続できないレベル)のエラー検知 | HDS_RET_ERR | メッセージを出力します。処理は中止して,プロセスを終了します。 |
#include<hds_ucommon.h> #include<hds_ureflect.h> int hds_uend(UINTERFACE_BLK *インタフェースブロック名, long *ステータス); |
呼び出し元に戻るときに戻り値を設定します。設定できる戻り値を次の表に示します。
表8-13 hds_uend()関数からの戻り値
コード | 状態 | ニモニック | 呼び出し元の処置 |
---|---|---|---|
0 | 正常終了 | HDS_RET_NORM | 正常にプロセスを終了させます。 |
4 | 軽度(継続できるレベル)のエラー検知 | HDS_RET_WARN | メッセージを出力します。プロセスは正常に終了させます。 |
0,4以外 | 重度(継続できないレベル)のエラー検知 | HDS_RET_ERR | メッセージを出力します。プロセスは正常に終了させます。 |
反映側Datareplicatorでは,hds_ubegin(),hds_uedit(),hds_uend()の関数のインタフェースになる構造体及びニモニックコードをヘッダファイルで用意しています。
反映情報編集UOCで使うヘッダファイルは,次に示すディレクトリに格納してあります。
UNIX版の場合: /opt/hirdbds/include/
Windows版の場合:Datareplicatorをインストールしたディレクトリ¥include¥
反映情報編集UOCのヘッダファイルの一覧を次の表に示します。
表8-14 反映情報編集UOCのヘッダファイルの一覧
ファイル名 | 内容 | 反映情報編集UOCに関連するメンバ |
---|---|---|
hds_ucommon.h | 反映情報編集UOCの共通の構造体及びニモニックコード |
|
hds_ureflect.h | 反映情報編集UOCの構造体及びニモニックコード |
|
反映情報編集UOCの関数の中で,操作できるファイルはユーザ独自のファイル(オープンしたファイル)だけです。ファイルの規則を次に示します。
SQL記述領域を使って反映側DBを更新する場合,必要な内容をUOCインタフェーステーブルからSQL記述領域に設定して,UOCを作成します。
UOCで直接,UOCインタフェーステーブルの列データを参照する場合は,データ型によってはC言語のキャストをし,参照する必要があります。UOCインタフェーステーブルの列データアドレスが指すデータのデータ形式,実データ長とC言語での表記の関係を次の表に示します。
表8-15 UOCの列データ型,データ長とC言語での表記の関係
UOCインタフェーステーブル | データ領域長 (バイト) | C言語での表記 | |
---|---|---|---|
ニモニック | 列データ長 | ||
HDS_T_INT | 4 | 4 | long |
HDS_T_SINT | 2 | 2 | short |
HDS_T_DEC | 先頭2バイト:精度 後ろ2バイト:位取り | 精度÷2+1 | char データエリア〔実データ長〕 |
HDS_T_FLT | 8 | 8 | double |
HDS_T_DBL | |||
HDS_T_SFLT | 4 | 4 | float |
HDS_T_REAL | |||
HDS_T_CHAR | 文字列長(バイト数) | UOCの列データ長 | char データエリア〔実データ長〕 |
HDS_T_MCHAR | |||
HDS_T_VCHAR | データ部文字列長(バイト数) | UOCの列データ長+2 | struct{ unsigned short 実データ長 char データエリア〔実データ長〕 } |
HDS_T_NCHAR | 文字列長(文字数) | UOCの列データ長*2 | char データエリア〔実データ長〕 |
HDS_T_NVCHAR | データ部文字列長(文字数) | UOCの列データ長*2+2 | struct{ unsigned short 実データ長 char データエリア〔実データ長〕 } |
HDS_T_DATE | 4 | 4 | char データエリア〔実データ長〕 |
HDS_T_TIME | 3 | 3 | char データエリア〔実データ長〕 |
HDS_T_YTD | 先頭2バイト:精度(8) 後ろ2バイト:位取り(0) | 5 | char データエリア〔実データ長〕 |
HDS_T_HTS | 先頭2バイト:精度(6) 後ろ2バイト:位取り(0) | 4 | char データエリア〔実データ長〕 |
HDS_T_BLOB (列オプションが0x80以外の場合) | データ部データ長(バイト数) | UOCの列データ長+8 | struct{ long 予備領域 unsigned long 実データ長 char データエリア〔実データ長〕 }※ |
HDS_T_BLOB (列オプションが0x80の場合) | 32 | UOCの列データ長+8 | 「表8-9 USUBSTR_BLKの内容」を参照してください。 |
HDS_T_UNPACK | UNPACKデータ長(バイト数) | 整数部けた数+小数部けた数 | char データエリア〔実データ長〕 |
HDS_T_TIMESTAMP | 7+↑p÷2↑(バイト数) p:小数部のけた数 | UOC列データ長 | char データエリア〔実データ長〕 |
HDS_T_BINARY (列オプションが0x80以外の場合) | データ部データ長(バイト数) | UOCの列データ長+4 | struct{ long 実データ長 char データエリア〔実データ長〕 }※ |
HDS_T_BINARY (列オプションが0x80の場合) | 32 | UOCの列データ長+8 | 「表8-9 USUBSTR_BLKの内容」を参照してください。 |