MAPEXCEPTIONの使用

MAPEXCEPTIONは、MAP文でソース表とターゲット表の名前にワイルドカードが使用されている場合に有効です。MAPEXCEPTION句は、通常のMAP文(ソース表をターゲット表にマップする文と同じ)に配置します。Replicatは、エラーを生成するすべての操作を、ワイルドカード指定されたすべての表から同じ例外表にマップします。したがって、例外表には、ワイルドカード指定されたすべての表におけるすべての列のスーパーセットが含まれています。

ワイルドカード構成では列を個別にマップできないため、COLMAP句をUSEDEFAULTSオプションとともに使用してワイルドカード指定された表の列マッピングを処理し(またはCOLMATCHパラメータを適宜使用し)、明示的な列マッピングを使用して追加情報(列変換関数またはSQLEXECで取得した情報など)をマップします。

MAPEXCEPTIONを使用する場合は、INSERTALLRECORDSパラメータをMAPEXCEPTION句に含めます。INSERTALLRECORDSは、すべての操作タイプがINSERT操作として例外表に適用されるようにします。これは、例外の正確なレコードを維持し、例外表で整合性エラーが発生しないようにするために必要です。

これらのパラメータの詳細は、Oracle GoldenGateパラメータおよび機能リファレンスを参照してください。

例11-22 MAPEXCEPTION

次に、例外マッピングでのMAPEXCEPTIONの使用例を示します。MAPおよびTARGET句には、ワイルドカードのソースおよびターゲット表名が含まれています。名前がTRXで始まるすべての表を処理するときに発生する例外が、指定されたマッピングを使用してfin.trxexceptions表に取得されます。

MAP src.trx*, TARGET trg.*,
MAPEXCEPTION (TARGET fin.trxexceptions,
INSERTALLRECORDS,
COLMAP (USEDEFAULTS,
ACCT_NO = ACCT_NO,
OPTYPE = @GETENV ('LASTERR', 'OPTYPE'),
DBERR = @GETENV ('LASTERR', 'DBERRNUM'),
DBERRMSG = @GETENV ('LASTERR', 'DBERRMSG')
)
);