HiRDB データ連動機能 HiRDB Datareplicator Version 8

[目次][用語][索引][前へ][次へ]

8.1.4 反映情報編集UOCで使う関数の文法

反映情報編集UOCは,C言語を使ってプログラミングします。反映側Datareplicatorには,反映情報編集UOCを作成するときに使う関数を備えています。

反映情報編集UOCで使える関数名と機能の概要を次の表に示します。

表8-3 反映情報編集UOCで使える関数と機能の概要

関数名 機能
hds_ubegin()
(編集開始指示)
反映情報の編集を開始することを指示します。ユーザは,反映側HiRDBへの接続処理又は環境の初期設定の処理を実行します。
hds_uedit()
(編集・加工指示)
反映情報の編集・加工及び同期点処理を指示します。ユーザは,反映情報を編集・加工してSQLを発行したり一般ファイルへ出力したりします。
hds_uend()
(編集終了指示)
反映情報の編集を終了することを指示します。ユーザは,反映側HiRDBからの切り離し処理又は環境の終了処理を実行します。
<この項の構成>
(1) hds_ubegin()(編集開始指示関数)
(2) hds_uedit()(編集・加工指示関数)
(3) hds_uend()(編集終了指示関数)
(4) 反映情報編集UOCで使うヘッダファイル
(5) 規則

(1) hds_ubegin()(編集開始指示関数)

(a) 関数の形式
 
     #include<hds_ucommon.h>
     #include<hds_ureflect.h>
      int hds_ubegin(UINTERFACE_BLK *インタフェースブロック名,
      long *ステータス);
 
(b) パラメタの説明

注1
反映側Datareplicatorでは,UINTERFACE_BLKのヘッダファイルを用意しているので,それを使ってください。ヘッダファイルについては,「表8-14 反映情報編集UOCのヘッダファイルの一覧」を参照してください。

注2
ユーザは,設定者が呼び出し元になっている領域を書き換えないでください。
(c) 戻り値

呼び出し元に戻るときに戻り値を設定します。設定できる戻り値を次の表に示します。

表8-5 hds_ubegin()からの戻り値

コード 状態 ニモニック 呼ぴ出し元の処置
0 正常終了 HDS_RET_NORM 処理を続行します。
4 軽度(継続できるレベル)のエラー検知 HDS_RET_WARN メッセージを出力します。処理は続行します。
0,4以外 重度(継続できないレベル)のエラー検知 HDS_RET_ERR メッセージを出力します。処理は中止し,プロセスを終了します。
(d) 抽出側Datareplicatorを使うときの注意

抽出側Datareplicatorの送信環境定義のnsndidxxxオペランド(xxxは001〜256の整数)に,送信抑止受信元識別子を指定している場合,HiRDBのCONNECT処理の直前に,HiRDBの環境変数である$PDCLTAPNAMEに,hdssqleで始まり抽出側Datareplicator識別子で終わる20バイト以内の文字列を設定してください。

抽出側Datareplicator識別子として設定される文字列は,インタフェースブロック内に設定される文字列と同じです(2バイトの16進数字の文字列)。

(2) hds_uedit()(編集・加工指示関数)

(a) 関数の形式
 
     #include<hds_ucommon.h>
     #include<hds_ureflect.h>
      int hds_uedit(UINTERFACE_BLK *インタフェースブロック名,
           UREFLECT_BLK *反映制御ブロック名,
           UDATA_BLK *キー情報ブロック名,
           UDATA_BLK *反映データブロック名,
           long *ステータス);
 
(b) パラメタの説明

注1
反映側Datareplicatorでは,UREFLECT_BLKのヘッダファイルを用意しているので,それを使ってください。ヘッダファイルについては,「表8-14 反映情報編集UOCのヘッダファイルの一覧」を参照してください。

注2
ユーザは,設定者が呼び出し元になっている領域を書き換えないでください。

注※1
UDATA_BLKの内容については,「表8-7 UDATA_BLKの内容」を参照してください。

注※2
UCOLUMN_BLKの内容については,「表8-8 UCOLUMN_BLKの内容」を参照してください。

注※3
BLOB型又はBINARY型の後方削除更新をしている場合のデータ構造です。USUBSTR_BLKの内容については,「表8-9 USUBSTR_BLKの内容」を参照してください。

表8-7 UDATA_BLKの内容

メンバ名 長さ(バイト) 属性 領域名 設定者 内容
colnum 4 long 列数 呼び出し元 マッピングキーの列数又は反映データの列数が設定されます。
*colinfptr 4 UCOLUMN_BLK* UCOLUMN_BLK*アドレス 呼び出し元 UCOLUMN_BLKのアドレスが設定されます。

Datareplicatorでは,UDATA_BLKのヘッダファイルを用意しているので,それを使ってください。ヘッダファイルについては,「表8-14 反映情報編集UOCのヘッダファイルの一覧」を参照してください。

表8-8 UCOLUMN_BLKの内容

メンバ名 長さ(バイト) 属性 領域名 設定者 内容
colname 30 char 列名 呼び出し元 列の名前が設定されます。
coltype 1 unsigned char 列データ型 呼び出し元 列のデータ型が設定されます。設定内容については,「表8-10 列データ型のニモニック」を参照してください。
coloption 1 unsigned char 列オプション 呼び出し元 列のオプションが設定されます。オプションの種類を次に示します。

HDS_COL_NOOPT(0x00):
オプションなし

HDS_COL_NULL(0x01):
NULLデータ

HDS_COL_MAPK(0x02):
マッピングキー
反映データブロックだけ設定されます。キー情報ブロックには設定されません。

HDS_COL_ARRAY(0x04):
配列列

HDS_COL_REPET(0x08):
繰返し列

HDS_COL_ELMNL(0x10):
繰返し列の要素の値がNULL

HDS_COL_REPTCOL(0x20):
繰返し構造指定

HDS_COL_BLOBSUB(0x40):
連結演算データ

HDS_COL_SUBSTR(0x80):
SUBSTR演算後方削除更新ログ
elementnum 4 union 繰返し列の有効要素番号
又は抽象データ型の数
呼び出し元

繰返し列のとき:
前2バイト(short)には有効要素番号が設定されます。*指定のときは−2が設定されます。
後2バイト(short)には該当する列の要素データの数が設定されます。

抽象データ型の列のとき:
継承関係を含めたデータ型の数が設定されます。継承がないときは1が設定されます。

配列列のとき:
前2バイトには抽出側配列列の要素番号が設定されます。
後2バイトには0が設定されます。
mltcolkind 1 unsigned char 繰返し列の更新種別 呼び出し元 繰返し列の場合の更新種別を次に示します。更新種別がUPDATEのときだけ有効になります。

HDS_COL_ADDV(0x01):ADD

HDS_COL_DELV(0x02):DELETE

HDS_COL_SETV(0x04):SET
adtfunc 1 char 抽象データ型の反映方式 呼び出し元 「0x01」で固定です。
charset 1 char 文字集合種別 呼び出し元 UOCに渡す列データの文字集合種別が設定されます。

文字集合指定なし:
X'00'(HDS_CSET_DEFAULT)

文字集合指定あり(EBCDIK):
X'01'(HDS_CSET_EBCDIK)
reserve1 2 char 予備領域 予備
collen 4 long 列データ長 呼び出し元 列のデータ長が設定されます。列オプションがNULLデータの場合,0が設定されます。
dataptr 4 union データアドレス 呼び出し元 列データのアドレスが設定されます。列オプションがNULLデータの場合,NULLポインタが設定されます。設定内容については,「表8-11 データアドレスのニモニック」を参照してください。

反映側Datareplicatorでは,UCOLUMN_BLKのヘッダファイルを用意しているので,それを使ってください。ヘッダファイルについては,「表8-14 反映情報編集UOCのヘッダファイルの一覧」を参照してください。

表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*
(c) 戻り値

呼び出し元に戻るときに戻り値を設定します。設定できる戻り値を次の表に示します。

表8-12 hds_uedit()からの戻り値

コード 状態 ニモニック 呼び出し元の処置
0 正常終了 HDS_RET_NORM 処理を続行します。
4 軽度(継続できるレベル)のエラー検知 HDS_RET_WARN メッセージを出力します。処理は続行されます。
0,4以外 重度(継続できないレベル)のエラー検知 HDS_RET_ERR メッセージを出力します。処理は中止して,プロセスを終了します。

(3) hds_uend()(編集終了指示関数)

(a) 関数の形式
 
     #include<hds_ucommon.h>
     #include<hds_ureflect.h>
      int hds_uend(UINTERFACE_BLK *インタフェースブロック名,
         long *ステータス);
 
(b) パラメタの説明
(c) 戻り値

呼び出し元に戻るときに戻り値を設定します。設定できる戻り値を次の表に示します。

表8-13 hds_uend()関数からの戻り値

コード 状態 ニモニック 呼び出し元の処置
0 正常終了 HDS_RET_NORM 正常にプロセスを終了させます。
4 軽度(継続できるレベル)のエラー検知 HDS_RET_WARN メッセージを出力します。プロセスは正常に終了させます。
0,4以外 重度(継続できないレベル)のエラー検知 HDS_RET_ERR メッセージを出力します。プロセスは正常に終了させます。

(4) 反映情報編集UOCで使うヘッダファイル

反映側Datareplicatorでは,hds_ubegin(),hds_uedit(),hds_uend()の関数のインタフェースになる構造体及びニモニックコードをヘッダファイルで用意しています。

反映情報編集UOCで使うヘッダファイルは,次に示すディレクトリに格納してあります。

UNIX版の場合: /opt/hirdbds/include/

Windows版の場合:Datareplicatorをインストールしたディレクトリ\include\

反映情報編集UOCのヘッダファイルの一覧を次の表に示します。

表8-14 反映情報編集UOCのヘッダファイルの一覧

ファイル名 内容 反映情報編集UOCに関連するメンバ
hds_ucommon.h 反映情報編集UOCの共通の構造体及びニモニックコード
  • UINTERFACE_BLK
  • 戻り値のニモニック
hds_ureflect.h 反映情報編集UOCの構造体及びニモニックコード
  • UREFLECT_BLK
  • UREFLECT_BLKのニモニック
  • UDATA_BLK
  • UCOLUMN_BLK
  • データ型のニモニック
  • データアドレスのニモニック

(5) 規則

(a) ファイル

反映情報編集UOCの関数の中で,操作できるファイルはユーザ独自のファイル(オープンしたファイル)だけです。ファイルの規則を次に示します。

(b) 定義との関連
(c) SQL記述領域への設定

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の内容」を参照してください。

繰返し列のデータは,一つの要素のデータ情報が一つのUCOLUMN_BLKに格納されます。

注※
連結演算のときも受け渡し方法は同じです。
(d) データ型