3.3.11 マージ表の作成
複数の表を抽出側システムから抽出した更新情報を反映側の一つの表に反映(n表を1表に反映)するとき,又は抽出側システムが構造型でもリレーショナル型データベースでもないときは,マッピングキーの制約でキー重複や該当行なしになって反映側システムでエラーになります。これを解決するため反映側システムでは,更新情報でINSERTするキーが重複したときにUPDATEに変換したり,UPDATEで該当行なしのときにINSERTに変換して格納したりできます。これをマージ表の作成といいます。
マージ表を作成するかどうかは,反映表定義に指定します。反映表定義の指定については,「5.10 反映定義」のload文の説明を参照してください。
(1) マージ表の前提条件
反映処理で作成できるマージ表には,次に示す条件があります。
-
一般表であること。時系列情報表は対象外です。
-
非FIX表であること。FIX表のときは,DELETEでnull値格納オプションを指定しないこと。ただし,n表からのマージ表でないときは,この条件は前提ではありません。
-
SQLプロセスを使った反映処理であること。反映情報編集UOCで編集した反映は,マージ表を作成できません。
-
マッピングキーが同じであること(n表からのマージ表のとき)。また,マッピングキーの全体又は一部の構成列にユニークインデクスがあること。かつ,非マッピングキー列にユニークインデクスの指定がないこと。
-
抽出表に対するPURGE TABLEが実行されないこと(n表からのマージ表のとき)。
-
マッピングキーに対して更新されないこと(n表からのマージ表のとき)。
(2) マージ表の処理
次の規則に従って,マージ表は作成されます。
-
UPDATEしたデータがNot Foundになったときは,INSERTデータとして格納されます。
-
INSERTしたデータがキー重複になったときは,UPDATEデータとして格納されます。
-
DELETE対象のデータのときは,反映定義のオプションによって 行を削除するか,対象列をnull値にして格納されます。
(3) 繰返し列を含む表へのマージ表反映
繰返し列を含む表に要素番号を指定したUPDATEを実行すると,列内の要素データすべてではなく,更新された要素のデータだけが更新情報として送られます。このときマージ表反映のINSERTで指定するデータが不足しないように,NULL値で補完されます。補完される方式を次に示します。
SQL |
要素# < 最小要素# |
最小要素# < 要素# < 最大要素# |
最大要素# < 要素# |
|
---|---|---|---|---|
INSERT |
補完不要 |
|||
UPDATE SET |
列指定 |
補完不要 |
||
要素指定 |
NULLで補完 |
NULLで補完 |
補完しない |
|
UPDATE ADD |
NULLで補完 |
ありえない |
補完しない |
|
UPDATE DELETE |
列値NULLとして反映 |
- 注
-
要素#は要素番号を示します。
最大要素#/最小要素#は,該当する繰返し列に対する更新情報にある要素の中で最大/最小の要素番号を示します。
(4) マージ表へ反映するデータの注意事項
-
連結演算データをマージ表へ反映する場合に,反映のUPDATEが該当行なし(SQLCODE=100)になったときのINSERTで反映するデータは,連結演算データだけになります。
-
後方削除更新をしているBLOB型又はBINARY型のデータは,マージ表には反映しないでください。抽出側DBと反映側DBで不整合が発生します。