我误解了 COLSEXCEPT 命令。我认为只有在对不在 COLSEXCEPT 列表中的字段进行更改时才会创建事务。它仍然创建一个事务,但只是不将这些字段发送到目标数据库(仍然不确定为什么要创建一个事务来更改您排除的字段)。
我确信有更好的方法,但是我能够通过对提取中的表应用过滤器来使用我所谓的解决方法来使其工作。这是一个繁琐的过程,因为该表有 82 个字段。对于我确实需要的所有其他 81 个字段,必须将 BEFORE 图像与 AFTER 图像进行比较。
当您在 FILTER 中有这么多参数时,您必须增加 FUNCTIONSTACKSIZE 以适应(在我的情况下,这需要 DBA 进行更改)。
我知道必须有更好的方法来处理这个问题,但这里是对我有用的代码:
TABLE tmp.bill, KEYCOLS(ACCT_ID, BILL_SEQ_NO), COLSEXCEPT(BL_ARREARS_IND), FILTER(ON UPDATE,((@BEFORE(ACCT_ID) <> @AFTER(ACCT_ID)) 或 (@BEFORE(BILL_SEQ_NO) <> @AFTER(BILL_SEQ_NO )) 或 (@BEFORE(ACTUAL_BALANCE_AMT) <> @AFTER(ACTUAL_BALANCE_AMT)) 或 (@STREQ(@BEFORE(AFTER_CYCLE_CHG_IND),@AFTER(AFTER_CYCLE_CHG_IND)) = 0) 或 (@BEFORE(AGGREGATION_ID) <> @AFTER(AGGREGATION_ID )) 或 (@STREQ(@BEFORE(APPLICATION_ID),@AFTER(APPLICATION_ID)) = 0) 或 (@STREQ(@BEFORE(BANK_ACCOUNT_NO),@AFTER(BANK_ACCOUNT_NO)) = 0) 或 (@STREQ(@BEFORE( BANK_CODE),@AFTER(BANK_CODE)) = 0) 或 (@STREQ(@BEFORE(BAN_STATUS),@AFTER(BAN_STATUS)) = 0) 或 (@STREQ(@BEFORE(BAN_STATUS_DATE),@AFTER(BAN_STATUS_DATE)) = 0) 或 (@BEFORE(BF_ADJ) <> @AFTER(BF_ADJ)) 或 (@STREQ(@BEFORE(BF_BTN),@AFTER(BF_BTN)) = 0) 或 (@BEFORE(BF_CALL_CHG) <>@AFTER(BF_CALL_CHG)) 或 (@BEFORE(BF_IMM_ADJ) <> @AFTER(BF_IMM_ADJ)) 或 (@BEFORE(BF_MON_SRV_CHG) <> @AFTER(BF_MON_SRV_CHG)) 或 (@BEFORE(BF_ONE_TIME_CRG) <> @AFTER(BF_ONE_TIME_CRG) ) 或 (@BEFORE(BF_TAXS) <> @AFTER(BF_TAXS)) 或 (@STREQ(@BEFORE(BILLING_METHOD),@AFTER(BILLING_METHOD)) = 0) 或 (@STREQ(@BEFORE(BILL_CONF_STATUS),@AFTER( BILL_CONF_STATUS)) = 0) 或 (@STREQ(@BEFORE(BILL_DATE),@AFTER(BILL_DATE)) = 0) 或 (@STREQ(@BEFORE(BILL_DUE_DATE),@AFTER(BILL_DUE_DATE)) = 0) 或 (@STREQ (@BEFORE(BILL_STATUS_DATE),@AFTER(BILL_STATUS_DATE)) = 0) 或 (@STREQ(@BEFORE(BL_BAL_HANDLE_IND),@AFTER(BL_BAL_HANDLE_IND)) = 0) 或 (@STREQ(@BEFORE(CARRY_OVER_IND),@AFTER( CARRY_OVER_IND)) = 0) 或 (@BEFORE(CH_BAL_CHGS) <> @AFTER(CH_BAL_CHGS)) 或 (@STREQ(@BEFORE(CREDIT_CARD_NO),@AFTER(CREDIT_CARD_NO)) = 0) 或 (@STREQ(@BEFORE(CREDIT_CARD_TYPE) ),@AFTER(CREDIT_CARD_TYPE)) = 0) 或 (@STREQ(@BEFORE(CR_CARD_AUTH_CODE),@AFTER(CR_CARD_AUTH_CODE)) = 0) 或 (@STREQ(@BEFORE(CR_CARD_EXP_DATE),@AFTER(CR_CARD_EXP_DATE)) = 0) 或(@BEFORE(CURR_CHARGE_AMT) <> @AFTER(CURR_CHARGE_AMT)) 或 (@BEFORE(CURR_CREDIT_AMT) <> @AFTER(CURR_CREDIT_AMT)) 或 (@BEFORE(CURR_OC_CHRG_AMT) <> @AFTER(CURR_OC_CHRG_AMT)) 或 (@BEFORE(CURR_RC_CHRG_AMT) ) <> @AFTER(CURR_RC_CHRG_AMT)) 或 (@BEFORE(CURR_UC_CHRG_AMT) <> @AFTER(CURR_UC_CHRG_AMT)) 或 (@STREQ(@BEFORE(CYCLE_CLOSE_DATE),@AFTER(CYCLE_CLOSE_DATE)) = 0) 或 (@BEFORE(CYCLE_CODE) ) <> @AFTER(CYCLE_CODE)) 或 (@BEFORE(CYCLE_RUN_MONTH) <> @AFTER(CYCLE_RUN_MONTH)) 或 (@BEFORE(CYCLE_RUN_YEAR) <> @AFTER(CYCLE_RUN_YEAR)) 或 (@BEFORE(DEPOSIT_PAID_AMT) <> @AFTER (DEPOSIT_PAID_AMT)) 或 (@BEFORE(DEPOSIT_REQ_AMT) <>@AFTER(DEPOSIT_REQ_AMT)) 或 (@STREQ(@BEFORE(DL_SERVICE_CODE),@AFTER(DL_SERVICE_CODE)) = 0) 或 (@BEFORE(DL_UPDATE_STAMP) <> @AFTER(DL_UPDATE_STAMP)) 或 (@BEFORE(FGN_COUNTY_TAX_AMT) <> @AFTER(FGN_COUNTY_TAX_AMT)) 或 (@BEFORE(FGN_FED_TAX_AMT) <> @AFTER(FGN_FED_TAX_AMT)) 或 (@BEFORE(FGN_LOCAL_TAX_AMT) <> @AFTER(FGN_LOCAL_TAX_AMT)) 或 (@BEFORE(FGN_STATE_TAX_AMT) <> @AFTER(FGN_STATE_TAX) ) 或 (@BEFORE(FREE_MINUTE_STATUS) <> @AFTER(FREE_MINUTE_STATUS)) 或 (@BEFORE(LATE_PYM_BASE_AMT) <> @AFTER(LATE_PYM_BASE_AMT)) 或 (@BEFORE(MASTER_BAN) <> @AFTER(MASTER_BAN)) 或 (@BEFORE (MB_BILL_SEQ_NO) <> @AFTER(MB_BILL_SEQ_NO)) 或 (@BEFORE(NM_ADR_LINK_SEQ_NO) <> @AFTER(NM_ADR_LINK_SEQ_NO)) 或 (@BEFORE(NON_TELECOM_AMT) <> @AFTER(NON_TELECOM_AMT)) 或 (@BEFORE(NUM_OF_PRODUCTS) <>@AFTER(NUM_OF_PRODUCTS)) 或 (@BEFORE(OPERATOR_ID) <> @AFTER(OPERATOR_ID)) 或 (@BEFORE(PAST_DUE_AMT) <> @AFTER(PAST_DUE_AMT)) 或 (@STREQ(@BEFORE(PAYMENT_METHOD),@AFTER( PAYMENT_METHOD)) = 0) 或 (@BEFORE(PAY_ARR_AMT_DUE) <> @AFTER(PAY_ARR_AMT_DUE)) 或 (@BEFORE(PAY_ARR_AMT_REM) <> @AFTER(PAY_ARR_AMT_REM)) 或 (@STREQ(@BEFORE(PRD_CVRG_END_DATE),@AFTER( PRD_CVRG_END_DATE)) = 0) 或 (@STREQ(@BEFORE(PRD_CVRG_STRT_DATE),@AFTER(PRD_CVRG_STRT_DATE)) = 0) 或 (@BEFORE(PREV_BALANCE_AMT) <> @AFTER(PREV_BALANCE_AMT)) 或 (@STREQ(@BEFORE(PRODUCTION_DATE) ),@AFTER(PRODUCTION_DATE)) = 0) 或 (@STREQ(@BEFORE(PRODUCTION_REQUEST),@AFTER(PRODUCTION_REQUEST)) = 0) 或 (@STREQ(@BEFORE(PRODUCTION_TYPE),@AFTER(PRODUCTION_TYPE)) = 0 ) 或 (@BEFORE(PRODUCTS_NUM_CALLS) <> @AFTER(PRODUCTS_NUM_CALLS)) 或 (@BEFORE(PRODUCTS_NUM_MINS) <>@AFTER(PRODUCTS_NUM_MINS)) 或 (@BEFORE(PYM_RECEIVED_AMT) <> @AFTER(PYM_RECEIVED_AMT)) 或 (@STREQ(@BEFORE(SYS_CREATION_DATE),@AFTER(SYS_CREATION_DATE)) = 0) 或 (@STREQ(@BEFORE(SYS_UPDATE_DATE) ),@AFTER(SYS_UPDATE_DATE)) = 0) 或 (@BEFORE(TAX_FED_AMT) <> @AFTER(TAX_FED_AMT)) 或 (@BEFORE(TAX_FED_USF_AMT) <> @AFTER(TAX_FED_USF_AMT)) 或 (@BEFORE(TAX_LOC_AMT) <> @AFTER(TAX_LOC_AMT)) 或 (@BEFORE(TAX_ROAM_AIR) <> @AFTER(TAX_ROAM_AIR)) 或 (@BEFORE(TAX_ROAM_SRV_CHARGE) <> @AFTER(TAX_ROAM_SRV_CHARGE)) 或 (@BEFORE(TAX_ROAM_TOLL) <> @AFTER(TAX_ROAM_TOLL) ) 或 (@BEFORE(TAX_STT_AMT) <> @AFTER(TAX_STT_AMT)) 或 (@BEFORE(TELECOM_AMT) <> @AFTER(TELECOM_AMT)) 或 (@BEFORE(TOTAL_BILLED_ADJUST) <> @AFTER(TOTAL_BILLED_ADJUST)) 或 (@BEFORE (TOTAL_BILLED_CHARGE) <>@AFTER(TOTAL_BILLED_CHARGE)) 或 (@BEFORE(TOTAL_COUNTY_TAX) <> @AFTER(TOTAL_COUNTY_TAX)) 或 (@BEFORE(TOTAL_DUE_AMT) <> @AFTER(TOTAL_DUE_AMT)) 或 (@BEFORE(TOTAL_TAX_FEES) <> @AFTER(TOTAL_TAX_FEES) )));