使用 ERCALLBACK
ERCALLBACK 是 Oracle GoldenGate 的基本使用者結束功能。用於將記錄環境定義提取至使用者出口程式。這就像是在其中包含多個個別函數的套件。您可以呼叫這些函數並取得傳回值。例如,可以呼叫 GET_BEFORE_AFTER_IND 或 GET_COLUMN_VALUE_FROM_NAME 等函數。這些函數稱為 function_code。
語法
ERCALLBACK (<function_code>, <buffer>, <result_code> );
<function_code>
回呼常式所要執行的函數。使用者回呼常式會根據傳送給回呼常式的函數代碼而有不同的行為。雖然某些函數可以同時用於 Extract 和 Replicat,但一個處理作業或另一個處理作業中的函數有效性取決於回呼常式期間為該函數設定的輸入參數。如需可用功能代碼的完整描述,請參閱功能代碼。
<buffer>
緩衝區的作廢指標,其中包含與指定函數代碼相關聯的預先定義結構。
<result_code>
回呼常式所執行的函數狀態。回呼常式傳回的結果代碼會指出回呼函數是否成功。結果代碼可以是表格 4-4 中的其中一個值。
表格 4 結果代碼
| 代碼 | 說明 |
|---|---|
EXIT_FN_RET_BAD_COLUMN_DATA |
擷取或設定資料欄資料時發現無效的資料。 |
EXIT_FN_RET_BAD_DATE_TIME |
日期、時戳或間隔類型 of 資料欄包含無效的日期或時間值。 |
EXIT_FN_RET_BAD_NUMERIC_VALUE |
資料欄的數值類型包含無效的數值。 |
EXIT_FN_RET_COLUMN_NOT_FOUND |
在壓縮的更新記錄中找不到資料欄 (由僅記錄已變更值的資料庫更新)。 |
EXIT_FN_RET_ENV_NOT_FOUND |
在記錄中找不到指定的環境值。 |
EXIT_FN_RET_EXCEEDED_MAX_LENGTH |
表格或資料欄的名稱不符合配置的緩衝區,因此無法擷取描述資料。 |
EXIT_FN_RET_FETCH_ERROR |
無法擷取記錄。檢視錯誤訊息以查看原因。 |
EXIT_FN_RET_INCOMPLETE_DDL_REC |
處理 DDL 記錄時發生內部錯誤。記錄可能不完整。 |
EXIT_FN_RET_INVALID_CALLBACK_FNC_CD |
傳送至回呼常式的回呼函數代碼無效。 |
EXIT_FN_RET_INVALID_COLUMN |
函數呼叫中參照了不存在的資料欄。 |
EXIT_FN_RET_INVALID_COLUMN_TYPE |
常式正嘗試操控 Oracle GoldenGate 為此目的不支援的資料類型。 |
EXIT_FN_RET_INVALID_CONTEXT |
在不適當的時間呼叫回呼函數。 |
EXIT_FN_RET_INVALID_PARAM |
傳送至回呼函數的參數無效。 |
EXIT_FN_RET_NO_SRCDB_INSTANCE |
找不到來源資料庫執行處理。 |
EXIT_FN_RET_NO_TGTDB_INSTANCE |
找不到目標資料庫執行處理。 |
EXIT_FN_RET_NOT_SUPPORTED |
此處理不支援這項功能。 |
EXIT_FN_RET_OK |
回呼函數成功。 |
EXIT_FN_RET_SESSION_CS_CNV_ERR |
傳回字元集轉換常式的 ULIB_ERR_INVALID_CHAR_FOUND 錯誤。轉換失敗。 |
EXIT_FN_RET_TABLE_NOT_FOUND |
指定的表格名稱無效. |
EXIT_FN_RET_TOKEN_NOT_FOUND |
在記錄中找不到指定的使用者權杖。 |
您可以使用 ERCALLBACK 來執行許多不同的函數呼叫。例如,如果您要取得表格的名稱,可以使用下列命令:
ERCALLBACK (GET_TABLE_NAME, &var, &result_code)
這些函數用於使用者結束程式的 c 程式碼內,以執行函數代碼一節中提供的任何函數呼叫。結合不同的 function_code 呼叫,您可以使用 ERCALLBACK 來執行許多工作,例如:
-
重新建立
DML敘述句 -
執行轉換
-
將特定資料欄拉出記錄
-
將資訊寫入報表檔案
例如,如果您需要每當活動訊號表中的延遲超過特定臨界值時,寫入至報表檔案的訊息,您可以使用 CUSEREXIT 函數。然後,CUSEREXIT 函數會對 ERCALLBACK 進行數次呼叫,以取得延遲資料欄資料、執行計算和比較,如果延遲超過指定的臨界值,則將訊息寫入報表檔案。