8.2.4 列データ編集UOCで使う関数の文法
列データ編集UOCは,C言語でプログラミングします。反映側Datareplicatorには,列データ編集UOCを作成するときに使う関数を備えています。
列データ編集UOCで使える関数名と機能の概要を次の表に示します。
関数名 |
機能 |
---|---|
hds_ucoleditX() (列データの編集) |
列データの編集前のデータを受け取って,編集後のデータを格納します。ユーザは,編集前のデータを編集して,編集後のデータを格納します。 |
(1) hds_ucoleditX(列データの編集関数)
列データ編集UOCで使う関数は,hds_ucoleditX(Xは1〜8)です。一つのDatareplicatorシステム内に8個のUOC関数を作成できます。
(a) 関数の形式
#include<hds_ucommon.h> #include<hds_ureflect.h> int hds_ucoleditX(UCOLENV_BLK *列データ編集インタフェース環境ブロック, UCOLUMN_BLK *編集前反映列情報, UCOLUMN_BLK *編集後反映列情報, int *ステータス);
(b) パラメタの説明
パラメタの内容を次に示します。
関数の構造体は,列データ編集UOCのヘッダファイルで定義しています。構造体の設定者が呼び出し元の領域は,更新しないでください。ヘッダファイルについては,「表8-31 列データ編集UOCで使うヘッダファイルの一覧」を参照してください。
-
UCOLENV_BLK
列データ編集インタフェースの環境情報を格納するブロックです。
UCOLENV_BLKの内容を次の表に示します。
表8‒25 UCOLENV_BLKの内容 メンバ名
長さ(バイト)
属性
領域名
設定者
内容
interface_blk
56
UINTERFACE_BLK
インタフェースブロック
呼び出し元
反映システム定義の情報
reflect_blk
96
UREFLECT_BLK
反映制御ブロック
呼び出し元
反映データの抽出側DB更新情報
auth_id
8
char
認可識別子
呼び出し元
反映側DB反映時の認可識別子
tbl_id
30
char
表識別子
呼び出し元
反映側DB反映時の表識別子
reserve
2
char
予備
呼び出し元
−
-
UINTERFACE_BLK,UREFLECT_BLK
UINTERFACE_BLKとUREFLECT_BLKの構造は,反映情報編集UOCと構造は同じですが,設定内容や使う領域が異なります。
UINTERFACE_BLKの内容を「表8-26 UINTERFACE_BLKの内容」に,UREFLECT_BLKの内容を「表8-27 UREFLECT_BLKの内容」に示します。
表8‒26 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 *
−
−
列データ編集UOCでは使いません。
inherinf2
4
int
−
−
列データ編集UOCでは使いません。
stopinf
4
int
−
−
列データ編集UOCでは使いません。
表8‒27 UREFLECT_BLKの内容 メンバ名
長さ(バイト)
属性
領域名
設定者
内容
updkind
8
char
更新種別
呼び出し元
抽出側DBを更新するときの種別。次に種別を示します。
- INSERT
-
INSERT文を示します。
- UPDATE
-
UPDATE文を示します。
注 種別は8バイト固定です。8バイトに満たない部分は,空白で埋められます。
auth_id
30
char
認可識別子
呼び出し元
抽出側DBを更新するときの認可識別子
tbl_id
30
char
表識別子
呼び出し元
抽出側DBを更新するときの表識別子
upd_date
4
char
更新日付
呼び出し元
抽出側DBを更新するときの日付(更新情報をジャーナルに出力した日付)。日付は10進符号なしパック形式(YYYYMMDD)で出力します。
YYYY:西暦年
MM:月
DD:日
upd_time
4
char
更新時刻
呼び出し元
抽出側DB更新時の時刻(更新情報をジャーナルに出力した時刻)時刻は10進符号なしパック形式(HHMMSSTT)で出力します。
HH:時
MM:分
SS:秒
TT:1/100秒
uapname
8
char
抽出側のUAP名
呼び出し元
抽出側DBを更新するときのユーザアプリケーションプログラム名
extsysid
4
char
抽出側DBのシステムID
呼び出し元
- 抽出側DBがHiRDBの場合
-
抽出側DBのHiRDB識別子
- 抽出側DBがメインフレーム(XDM/DS,PDMII E2,RDB1 E2)の場合
-
抽出側DBのサブシステムID
infflag1
1
unsigned char
フラグ1
呼び出し元
未使用
- HDS_NULL_FLAG (0x00)
-
固定値
infflag2
1
unsigned char
フラグ2
呼び出し元
未使用
- HDS_NULL_FLAG (0x00)
-
固定値
infflag3
1
unsigned char
フラグ3
呼び出し元
未使用
- (0x00)
-
固定値
reserve1
1
char
−
−
(境界調整用)
infflag4
4
int
フラグ4
呼び出し元
未使用
- (0x00)
-
固定値
-
UCOLUMN_BLK
UCOLUMN_BLKは,列データについての情報を格納する領域です。
編集前反映列情報は,呼び出し元が更新情報の更新データについての情報を格納し,列データ編集UOCへ渡します。一方,編集後反映列情報は,UOCで編集した情報を格納する領域です。編集後のデータ型,列オプション(任意),列データ長の設定,編集後のデータは,編集後反映列情報のデータアドレスが示す領域へUOCが格納してください。
UCOLUMN_BLKの内容を次の表に示します。
表8‒28 UCOLUMN_BLKの内容 メンバ名
長さ(バイト)
属性
領域名
編集前
設定者
編集後
設定者
内容
colname
30
char
列名
呼び出し元
呼び出し元
- 編集前反映列情報
-
抽出元表の列名が設定されます。
- 編集後反映列情報
-
反映先表の列名が設定されます。
coltype
1
unsigned char
列タイプ
呼び出し元
呼び出し先
編集前反映列情報として,抽出列の列データ型が設定されます。
編集後反映列情報として,編集後の列データ型を設定してください。
反映情報編集インタフェースと同じニモニックを使ってください(ただし,編集後反映列情報には,BLOB,BINARY,UNPACK,及びADT(SGMLTEXT,FREEWORD,XML)データ型は指定できません)。
coloption
1
unsigned char
列オプション
呼び出し元
呼び出し先
編集前反映列情報として,抽出列の列オプションが設定されます。
編集後反映列情報として,編集後の列オプションを設定してください。
設定される列オプションを次に示します。
- HDS_COL_NOOPT (0x00)
-
オプションなし
- HDS_COL_NULL (0x01)
-
NULLデータ
- HDS_COL_ARRAY (0x04)
-
配列列(ただし,編集後反映列情報には,配列列オプションは設定できません)
elementnum
4
union
配列列の有効要素番号
呼び出し元
−
編集前反映列情報として,列オプションに配列が指定されている場合,配列列の有効要素番号を設定します(編集後反映列情報には設定できません)。
mltcolkind
1
unsigned char
−
−
−
列データ編集UOCでは使いません。
adtfunc
1
unsigned char
ADT列反映方式
呼び出し元
−
抽象データ型連動方式として,次に示す値が設定されます。
- 0x00
-
抽象データ型以外
- HDS_ADTREP_NORM(0x01)
-
コンストラクタ関数反映方式
charset
1
char
文字集合種別
呼び出し元
−
UOCに渡す列データの文字集合種別が設定されます。
編集前と編集後の文字集合種別は変更しないでください。変更すると,編集後の文字集合種別を無視し,編集前の文字集合として以降の処理を続行します。
- 文字集合指定なし:
-
X'00'(HDS_CSET_DEFAULT)
- 文字集合指定あり(EBCDIK):
-
X'01'(HDS_CSET_EBCDIK)
reserve1
1
char
−
−
−
(境界調整用)
collen
4
int
列データ長
呼び出し元
呼び出し先
列のデータ長。内容については,「表8-29 列データ長の設定規則」を参照してください。
ただし,列オプションがNULLデータのときは,編集前反映列情報には0を設定します。編集後反映列情報に列オプションとしてNULLデータを設定する場合,データ型に関係なく列データ長を設定する必要はありません。
dataptr
4
union
データアドレス
呼び出し元
−
- 編集前反映列情報
-
編集前列データのアドレスが設定されています。
列オプションがNULLデータのときには,データアドレスとして,NULLが設定されています。
- 編集後反映列情報
-
列データ編集領域のアドレスが設定されています。列データ編集領域は,32002バイトの領域です。列データ編集UOCでは,本アドレスが示す領域へ対して編集データを設定してください。
アドレスの型は,反映情報編集インタフェースと同じニモニックを使ってください。
表8‒29 列データ長の設定規則 変換前/変換後
列データ型
編集前反映列情報
編集後反映列情報
備 考
設定有無
設定内容
設定要否
設定内容
NCHAR
有
編集前データ長[文字数]
要
編集後データ長[文字数]
−
CHAR
MCHAR
UNPACK
有
編集前データ長[バイト数]
要
編集後データ長[バイト数]
編集後反映列データ型にUNPACK型は指定できません。
NVARCHAR
VARCHAR
MVARCHAR
無
−
不要
−
編集前データは,データエリア内の先頭2バイトに格納されている実長を参照して編集してください。また,編集後データにはデータエリアの先頭2バイトに,編集後データの実長を設定してください。
列データ型がNVARCHARのときは,文字数を設定,VARCHAR,MVARCHARのときは,バイト数を設定してください。
DECIMAL
有
- 先頭2バイト
-
精度(全体のけた数)
- 後ろ2バイト
-
位取り(小数部けた数)
要
- 先頭2バイト
-
精度(全体のけた数)
- 後ろ2バイト
-
位取り(小数部けた数)
次の場合,精度の最大値は38となります。
-
反映側HiRDBのバージョンが08-04以降の場合
-
反映側DBMSがOracle又はSQL Serverの場合
上記以外の場合は,精度の最大値は29となります。
TIMESTAMP
有
- 先頭2バイト
-
編集前データ長
7+↑p÷2↑[バイト数]
- 後ろ2バイト
-
位取り(小数部けた数)
要
- 先頭2バイト
-
編集後データ長
7+↑p÷2↑[バイト数]
- 後ろ2バイト
-
位取り(小数部けた数)
pは,位取り(小数部けた数)を表す数値です。
上記以外
無
−
不要
−
データ長は,HiRDBのデータ形式を参照してください。
(c) ステータス
列データ編集UOC関数をエラーリターンする場合に設定できます。
設定したステータス値は,Datareplicatorに制御が戻った後に,エラーメッセージとともに出力されます。
(2) 列データ編集UOCで使うヘッダファイル
列データ編集UOCで使うヘッダファイルは,次に示すディレクトリに格納してあります。
UNIX版: /opt/hirdbds/include/
Windows版の場合:Datareplicatorをインストールしたディレクトリ\include
列データ編集UOCで使うヘッダファイルの一覧を次の表に示します。