使用 MAPEXCEPTION
如果 MAP 语句中源表和目标表的名称是通配符,则 MAPEXCEPTION 有效。将 MAPEXCEPTION 子句放在常规 MAP 语句中,该语句与将源表映射到目标表的语句相同。复制将生成错误的所有操作从所有通配符表映射到同一异常表;因此,异常表应包含所有通配符表中所有列的超集。
由于无法在通配符配置中单独映射列,因此可以使用带有 USEDEFAULTS 选项的 COLMAP 子句来处理通配符表的列映射(如果适用,也可以使用 COLMATCH 参数),并使用显式列映射来映射任何附加信息,例如使用列转换函数或 SQLEXEC 捕获的信息。
使用 MAPEXCEPTION 时,在 MAPEXCEPTION 子句中包括 INSERTALLRECORDS 参数。INSERTALLRECORDS 使所有操作类型都作为 INSERT 操作应用于异常表。这是保持异常的准确记录和防止异常表中的完整性错误所必需的。
有关这些参数的更多信息,请参阅Oracle GoldenGate 的参数和函数参考。
示例 9-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')
)
);