HiRDB データ連動機能 HiRDB Datareplicator Version 8
反映情報編集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()関数の呼び出し時だけ有効です。
|
呼び出し元に戻るときに戻り値を設定します。設定できる戻り値を次の表に示します。
| コード | 状態 | ニモニック | 呼ぴ出し元の処置 |
|---|---|---|---|
| 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* |
呼び出し元に戻るときに戻り値を設定します。設定できる戻り値を次の表に示します。
| コード | 状態 | ニモニック | 呼び出し元の処置 |
|---|---|---|---|
| 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 *ステータス); |
呼び出し元に戻るときに戻り値を設定します。設定できる戻り値を次の表に示します。
| コード | 状態 | ニモニック | 呼び出し元の処置 |
|---|---|---|---|
| 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の内容」を参照してください。 |
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.