DECOMPRESS_RECORD
Gültig für
Extract und Replicat
Beschreibung
Verwenden Sie die Funktion DECOMPRESS_RECORD, wenn Sie einen gesamten Aktualisierungsdatensatz mit der Funktion GET_RECORD_BUFFER (siehe "GET_RECORD_BUFFER") oder SET_RECORD_BUFFER abrufen oder bearbeiten möchten (siehe) und der Datensatz komprimiert wird. DECOMPRESS_RECORD erleichtert die Verarbeitung und Zuordnung komprimierter Datensätze, indem der Datensatz in das logische Spaltenlayout eingefügt wird. Die vorhandenen Spalten befinden sich an den erwarteten Positionen ohne Index- und Längenindikatoren (siehe "Format komprimierter Datensätze"). Die fehlenden Spalten werden als Nullen dargestellt. Bei Verwendung sollte DECOMPRESS_RECORD aufgerufen werden, bevor Änderungen vorgenommen werden. Nachdem die Verarbeitung des User Exit abgeschlossen ist, komprimieren Sie den Datensatz mit der Funktion COMPRESS_RECORD (siehe), bevor Sie ihn an den Oracle GoldenGate-Prozess zurückgeben.
Diese Funktion ist nur für die Verarbeitung von UPDATE-Vorgängen gültig. Löschvorgänge, Einfügungen und Aktualisierungen werden im Puffer als vollständige Aufzeichnungsbilder angezeigt.
Der Inhalt des Datensatzpuffers wird nicht in oder aus dem Zeichensatz des User Exit konvertiert. Wird unverändert übergeben.
Komprimiertes Datensatzformat
Komprimierte SQL-Updates haben das folgende Format:
<index> <length> <value> [<index> <length> <value> ][...]
wobei:
-
<index>ist ein Zwei-Byte-Index in der Liste der Spalten der Tabelle (erste Spalte ist Null). -
<length>ist die zwei Byte lange Tabelle. -
<value>ist der tatsächliche Spaltenwert, einschließlich eines der folgenden Zwei-Byte-Nullindikatoren, sofern zutreffend.0ist nicht null.-1ist null.
Syntax
#include "usrdecs.h"
short result_code;
compressed_rec_def compressed_rec;
ERCALLBACK (DECOMPRESS_RECORD, &compressed_rec, &result_code);
Puffer
typedef struct
{
char *compressed_rec;
long compressed_len;
char *decompressed_rec;
long decompressed_len;
short *columns_present;
short source_or_target;
char requesting_before_after_ind;
} compressed_rec_def;
Eingabe
<compressed_rec>
Ein Zeiger auf den Datensatz im komprimierten Format. Verwenden Sie die Funktion GET_RECORD_BUFFER, um diesen Wert abzurufen (siehe "GET_RECORD_BUFFER").
<compressed_len>
Die Länge des komprimierten Datensatzes. Verwenden Sie die Funktion GET_RECORD_BUFFER (siehe "GET_RECORD_BUFFER") oder GET_RECORD_LENGTH (siehe), um diesen Wert abzurufen.
<source_or_target>
Eine der folgenden Optionen gibt an, ob der Quell- oder Ziel-Record dekomprimiert wird.
EXIT_FN_SOURCE_VAL
EXIT_FN_TARGET_VAL
<requesting_before_after_ind>
Wird als interne Eingabe verwendet. Muss nicht festgelegt werden. Wird diese Einstellung gesetzt, wird sie ignoriert.
Ausgabe
<decompressed_rec>
Ein Zeiger auf den Datensatz, der im dekomprimierten Format zurückgegeben wird. Es wird davon ausgegangen, dass der Datensatz das interne kanonische Format von Oracle GoldenGate aufweist. Der Aufrufer muss sicherstellen, dass decompressed_rec die entsprechende Speichermenge zugewiesen wird.
<decompressed_len>
Die zurückgegebene Länge des dekomprimierten Datensatzes.
<columns_present>
Ein Array von Werten, das die im komprimierten Record vorhandenen Spalten angibt. Beispiel: Wenn die erste, dritte und sechste Spalte im komprimierten Datensatz vorhanden sind und die Gesamtzahl der Spalten in der Tabelle sieben beträgt, sollte das Array Folgendes enthalten:
1, 0, 1, 0, 0, 1, 0
Mit diesem Array können Zuordnungsfunktionen bestimmen, wann und ob eine komprimierte Spalte zugeordnet werden soll.
Rückgabewerte
EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_OK
EXIT_FN_RET_INVALID_PARAM