ERCALLBACK verwenden
ERCALLBACK ist die grundlegende User Exit-Funktion für Oracle GoldenGate. Wird verwendet, um den Datensatzkontext in den User Exit zu ziehen. Es ist wie ein Paket, das mehrere einzelne Funktionen enthält. Sie können diese Funktionen aufrufen und Rückgabewerte abrufen. Beispiel: Funktionen wie GET_BEFORE_AFTER_IND oder GET_COLUMN_VALUE_FROM_NAME können aufgerufen werden. Diese Funktionen werden als function_code bezeichnet.
Syntax
ERCALLBACK (<function_code>, <buffer>, <result_code> );
<function_code>
Die Funktion, die von der Callback-Routine ausgeführt werden soll. Die Benutzer-Callback-Routine verhält sich je nach Funktionscode, der an die Callback-Routine übergeben wird, unterschiedlich. Während einige Funktionen sowohl für Extract als auch für Replicat verwendet werden können, hängt die Gültigkeit der Funktion in einem oder dem anderen Prozess von den Eingabeparametern ab, die während der Callback-Routine für diese Funktion festgelegt werden. Eine vollständige Beschreibung der verfügbaren Funktionscodes finden Sie unter Funktionscodes.
<buffer>
Ein leerer Zeiger auf einen Puffer, der eine vordefinierte Struktur enthält, die dem angegebenen Funktionscode zugeordnet ist.
<result_code>
Der Status der Funktion, die von der Callback-Routine ausgeführt wird. Der von der Callback-Routine zurückgegebene Ergebniscode gibt an, ob die Callback-Funktion erfolgreich war. Ein Ergebniscode kann einer der Werte in Tabelle 4-4 sein.
Tabelle 4: Ergebniscodes
| Schlüssel | Beschreibung |
|---|---|
EXIT_FN_RET_BAD_COLUMN_DATA |
Beim Abrufen oder Festlegen von Spaltendaten sind ungültige Daten aufgetreten. |
EXIT_FN_RET_BAD_DATE_TIME |
Eine Spalte vom Typ of für Datum, Zeitstempel oder Intervall enthält einen ungültigen Datums- oder Uhrzeitwert. |
EXIT_FN_RET_BAD_NUMERIC_VALUE |
Ein numerischer Spaltentyp enthält einen ungültigen numerischen Wert. |
EXIT_FN_RET_COLUMN_NOT_FOUND |
Die Spalte wurde in einem komprimierten Aktualisierungsdatensatz nicht gefunden (Update durch eine Datenbank, die nur die geänderten Werte protokolliert). |
EXIT_FN_RET_ENV_NOT_FOUND |
Der angegebene Umgebungswert konnte im Datensatz nicht gefunden werden. |
EXIT_FN_RET_EXCEEDED_MAX_LENGTH |
Die Metadaten konnten nicht abgerufen werden, da der Name der Tabelle oder Spalte nicht in den zugewiesenen Puffer passte. |
EXIT_FN_RET_FETCH_ERROR |
Der Datensatz konnte nicht abgerufen werden. Zeigen Sie die Fehlermeldung an, um den Grund anzuzeigen. |
EXIT_FN_RET_INCOMPLETE_DDL_REC |
Beim Verarbeiten des DDL-Datensatzes ist ein interner Fehler aufgetreten. Der Datensatz ist wahrscheinlich unvollständig. |
EXIT_FN_RET_INVALID_CALLBACK_FNC_CD |
Ein ungültiger Callback-Funktionscode wurde an die Callback-Routine übergeben. |
EXIT_FN_RET_INVALID_COLUMN |
Im Funktionsaufruf wurde auf eine nicht vorhandene Spalte verwiesen. |
EXIT_FN_RET_INVALID_COLUMN_TYPE |
Die Routine versucht, einen Datentyp zu bearbeiten, der von Oracle GoldenGate zu diesem Zweck nicht unterstützt wird. |
EXIT_FN_RET_INVALID_CONTEXT |
Die Callback-Funktion wurde zu einem falschen Zeitpunkt aufgerufen. |
EXIT_FN_RET_INVALID_PARAM |
Ein ungültiger Parameter wurde an die Callback-Funktion übergeben. |
EXIT_FN_RET_NO_SRCDB_INSTANCE |
Die Quelldatenbankinstanz konnte nicht gefunden werden. |
EXIT_FN_RET_NO_TGTDB_INSTANCE |
Die Zieldatenbankinstanz konnte nicht gefunden werden. |
EXIT_FN_RET_NOT_SUPPORTED |
Diese Funktion wird für diesen Prozess nicht unterstützt. |
EXIT_FN_RET_OK |
Die Callback-Funktion war erfolgreich. |
EXIT_FN_RET_SESSION_CS_CNV_ERR |
Ein ULIB_ERR_INVALID_CHAR_FOUND-Fehler wurde an die Zeichensatzkonvertierungsroutine zurückgegeben. Die Konvertierung ist fehlgeschlagen. |
EXIT_FN_RET_TABLE_NOT_FOUND |
Ungültiger Tabellenname angegeben. |
EXIT_FN_RET_TOKEN_NOT_FOUND |
Das angegebene Benutzertoken konnte im Datensatz nicht gefunden werden. |
Mit ERCALLBACK können Sie viele verschiedene Funktionsaufrufe ausführen. Beispiel: Wenn Sie den Namen einer Tabelle abrufen möchten, können Sie den folgenden Befehl verwenden:
ERCALLBACK (GET_TABLE_NAME, &var, &result_code)
Diese Funktionen werden im c-Code für den User Exit verwendet, um einen der Aufrufe für Funktionen auszuführen, die im Abschnitt Funktionscodes bereitgestellt werden. Mit der Kombination der verschiedenen function_code-Aufrufe können Sie viele Aufgaben mit ERCALLBACK ausführen, wie:
-
DML-Anweisungen neu erstellen -
Transformationen durchführen
-
Bestimmte Spalten aus einem Datensatz abrufen
-
Informationen in eine Berichtsdatei schreiben
Beispiel: Wenn Sie eine Nachricht in die Berichtsdatei schreiben müssen, wenn die Verzögerung in der Heartbeat-Tabelle einen bestimmten Schwellenwert überschreitet, können Sie die Funktion CUSEREXIT verwenden. Die Funktion CUSEREXIT führt dann zahlreiche Aufrufe an ERCALLBACK aus, um die Daten der Lag-Spalte abzurufen, Berechnungen und den Vergleich durchzuführen. Wenn die Verzögerung den angegebenen Schwellenwert überschreitet, wird eine Meldung in die Berichtsdatei geschrieben.