8.1.5 反映情報編集UOCでの抽象データ型の扱い
反映情報編集UOCに抽象データ型を渡す場合,抽象データ型のコンストラクタ関数の入力データは,抽象データ型の属性データとして渡されます。
抽象データ型の属性データは,抽象データ型固有の情報を含んでいるため,反映情報編集UOCでも,抽象データ型のコンストラクタ関数にそのまま反映してください(抽象データ型の更新データを編集及び加工して反映することはできません)。
(1) 抽象データ型のニモニックと列データ構造
抽象データ型のニモニックと列データ構造について説明します。
(a) 抽象データ型のニモニック
抽象データ型のニモニックを「表8-15 列データ型のニモニック(UCOLUMN_BLK.coltype)」と「表8-16 データアドレスのニモニック(UCOLUMN_BLK.dataptr)」に示します。抽象データ型以外のニモニックについては,「表8-9 列データ型のニモニック」と「表8-10データアドレスのニモニック」を参照してください。
列データ型 |
ニモニック |
データコード |
---|---|---|
ADT(抽象データ型) |
HDS_T_ADT |
(0x83) |
データ型 |
ニモニック |
アドレスタイプ |
---|---|---|
ADT(抽象データ型) |
HDS_A_ADT |
UTYPE_BLK * |
(b) 抽象データ型の列データ構造
抽象データ型の列データ構造を次の図に示します。抽象データ型以外の列データ構造については,「図8-4 UDATA_BLKとその関連構造」を参照してください。
- 注※1
-
UDATA_BLKの内容については,「表8-6 UDATA_BLKの内容」を参照してください。
- 注※2
-
UCOLUMN_BLKの内容については,「表8-7 UCOLUMN_BLKの内容」を参照してください。
UTYPE_BLK(抽象データ型情報)の内容を次の表に示します。
メンバ名 |
長さ(バイト) |
属性 |
領域名 |
設定者 |
内容 |
---|---|---|---|---|---|
schema_name |
31 |
char |
認可識別子 |
呼出元 |
抽象データ型の認可識別子(終端記号を含む) |
type_name |
31 |
char |
抽象データ型名 |
呼出元 |
抽象データ型の型名(終端記号を含む) |
reserve1 |
2 |
char |
予備領域1 |
呼出元 |
予備 |
def_attrnum |
4 |
int |
定義属性数 |
呼出元 |
抽象データ型の定義属性数 |
set_attrnum |
4 |
int |
属性データ数 |
呼出元 |
データ型中に格納されている属性データ数 |
data_addr |
8 |
UATTR_BLK * |
UATTR_BLK*アドレス |
呼出元 |
属性管理テーブル(UATTR_BLK)のアドレス |
reserve2 |
8 |
char |
予備領域2 |
呼出元 |
予備 |
UATTR_BLK(属性データ情報)の内容を次の表に示します。
メンバ名 |
長さ(バイト) |
属性 |
領域名 |
設定者 |
内容 |
---|---|---|---|---|---|
attr_name |
31 |
char |
属性名 |
呼出元 |
属性名(終端記号を含む) |
attr_type |
1 |
unsignedchar |
属性のデータ型 |
呼出元 |
属性のデータ型 データ型のニモニックについては,「表8-9 列データ型のニモニック」を参照してください。 |
null_flag |
1 |
unsignedchar |
属性のNULLフラグ |
呼出元 |
属性のNULLフラグ
|
adtfunc |
1 |
unsignedchar |
抽象データ型の反映方式 |
呼出元 |
属性抽象データ型反映方式
|
reserve1 |
3 |
char |
予備領域1 |
呼出元 |
予備 |
attr_len |
4 |
int |
属性データ長 |
呼出元 |
属性データ長 次の場合は0になります。
|
adtelnum |
4 |
int |
抽象データ型継承数 |
呼出元 |
属性のデータ型が抽象データ型の場合に,継承関係にあるデータ型数
|
data_addr |
8 |
UNION * |
属性データのアドレス |
呼出元 |
属性データのアドレス(抽出側で入力した抽象データ型のコンストラクタ関数の入力データ)
データアドレスのニモニックについては,「表8-10データアドレスのニモニック」を参照してください。 |
reserve2 |
8 |
char |
予備領域2 |
呼出元 |
予備 |
(c) 各抽象データ型のUTYPE_BLKとUATTR_BLKの設定内容
各抽象データ型のUTYPE_BLKの設定内容を「表8-19 各抽象データ型のUTYPE_BLKの設定内容」に,UATTR_BLKの設定内容を「表8-20 各抽象データ型のUATTR_BLKの設定内容」に示します。
メンバ名 |
抽象データ型 |
||
---|---|---|---|
SGMLTEXT |
FREEWORD |
XML |
|
schema_name |
MASTER |
MASTER |
MASTER |
type_name |
SGMLTEXT |
FREEWORD |
XML |
reserve1 |
予備 |
予備 |
予備 |
def_attrnum |
0 |
0 |
0 |
set_attrnum |
1 |
1 |
1 |
data_addr |
UATTR_BLKのアドレス |
UATTR_BLKのアドレス |
UATTR_BLKのアドレス |
reserve2 |
予備 |
予備 |
予備 |
メンバ名 |
抽象データ型 |
||
---|---|---|---|
SGMLTEXT |
FREEWORD |
XML |
|
attr_name |
未設定 |
未設定 |
未設定 |
attr_type |
HDS_T_BLOB(0x93)※ |
HDS_T_VCHAR(0xC1)※ |
HDS_T_BINARY(0x91)※ |
null_flag |
0x00 |
0x00 |
0x00 |
adtfunc |
0x00 |
0x00 |
0x00 |
reserve1 |
予備 |
予備 |
予備 |
attr_len |
実際の属性データ長 (最大2,147,483,647) |
実際の属性データ長 (最大32,000) |
実際の属性データ長 (最大2,147,483,647) |
adtelnum |
0 |
0 |
0 |
data_addr |
属性データのアドレス |
属性データのアドレス |
属性データのアドレス |
reserve2 |
予備 |
予備 |
予備 |
- 注※
-
反映情報編集UOCに渡した抽象データ型の属性データを参照する場合は,通常の列データ型と同じようにC言語のキャストをしてください。属性データのアドレスが指すデータ構造を属性データ型にキャストするときは,「表8-14 UOCの列データ型,データ長とC言語での表記の関係」を参照してください。
(2) 抽象データ型を扱うときの注意事項
抽象データ型の場合,反映情報編集UOCに渡すUCOLUMN_BLKのcollenメンバ(列データ長)には値を設定しません。そのため,抽象データ型を扱うときは,UCOLUMN_BLKのcollenメンバの値を参照しないでください。
(3) 抽象データ型を扱う反映情報編集UOCのサンプル
- 抽出対象表及び反映対象表の構成
-
抽出対象表の構成を次の図に示します。反映対象表も同じ構成になります。
- コーディング例
-
SGMLTEXT型,FREEWORD型,及びXML型の列を含む表に対してINSERTを実行するコーディング例を次の図に示します。
図8‒6 抽象データ型の列を含む表に対してINSERTを実行するコーディング例