Hitachi

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


8.2.4 列データ編集UOCで使う関数の文法

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

列データ編集UOCで使える関数名と機能の概要を次の表に示します。

表8‒24 列データ編集UOCで使える関数と機能の概要

関数名

機能

hds_ucoleditX()

(列データの編集)

列データの編集前のデータを受け取って,編集後のデータを格納します。ユーザは,編集前のデータを編集して,編集後のデータを格納します。

〈この項の構成〉

(1) hds_ucoleditX(列データの編集関数)

列データ編集UOCで使う関数は,hds_ucoleditXXは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に制御が戻った後に,エラーメッセージとともに出力されます。

(d) 戻り値

列データ編集UOC関数では,呼び出し元にリターンするときに戻り値を設定してください。

設定できる列データ編集UOCからの戻り値を次の表に示します。

表8‒30 hds_ucoleditX()からの戻り値

状態

コード

ニモニック

リターン後の処置

正常終了

0

HDS_RET_NORM

反映処理を続行します。

エラー検知(継続できるレベル)

4

HDS_RET_WARN

呼び出し元でメッセージを出力し,反映処理を続行します。

エラー検知(継続できないレベル)

0,4以外

HDS_RET_ERR

呼び出し元でメッセージを出力し,その後,反映処理は中止します。

(2) 列データ編集UOCで使うヘッダファイル

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

UNIX版: /opt/hirdbds/include/

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

列データ編集UOCで使うヘッダファイルの一覧を次の表に示します。

表8‒31 列データ編集UOCで使うヘッダファイルの一覧

ファイル名

内容

列データ編集UOCに関連するメンバ

hds_ucommon.h

列データ編集UOCの共通の構造体及びニモニックコード

・UINTERFACE_BLK

・戻り値のニモニック

hds_ureflect.h

列データ編集UOCの構造体及びニモニックコード

・UCOLENV_BLK

・UREFLECT_BLK

・UREFLECT_BLKで使うニモニック

・UCOLUMN_BLK

・データ型のニモニック

・データアドレスのニモニック