GET_COLUMN_VALUE_FROM_INDEX

Gültig für

Extrakt und Replicat

Beschreibung

Verwenden Sie die Funktion GET_COLUMN_VALUE_FROM_INDEX, um den Spaltenwert mit dem angegebenen Spaltenindex aus dem Datensatz abzurufen. Spaltenwerte sind die Grundlage für die meisten Logik innerhalb des User Exit. Sie können komplexe Logik auf den Werten einzelner Spalten im Datensatz basieren. Sie können das Zeichenformat des zurückgegebenen Werts angeben.

Wenn die Zeichensession des User Exit mit SET_SESSION_CHARSET auf einen anderen Wert als den Standardzeichensatz des Betriebssystems gesetzt wird, wie in ULIB_CS_DEFAULT in der Datei ucharset.h definiert, werden die Zeichendaten, die zwischen dem User Exit und dem Prozess ausgetauscht werden, im Sessionzeichensatz interpretiert.

Ein Spaltenwert wird nur dann auf den Sessionzeichensatz gesetzt, wenn Folgendes zutrifft:

Syntax

#include "usrdecs.h"
short result_code;
column_def column;
ERCALLBACK (GET_COLUMN_VALUE_FROM_INDEX, &column, &result_code);

Puffer

typedef struct
{
char *column_value;
unsigned short max_value_length;
unsigned short actual_value_length;
short null_value;
short remove_column;
short value_truncated;
short column_index;
char *column_name;
/* Version 3 CALLBACK_STRUCT_VERSION */
short column_value_mode;
short source_or_target;
/* Version 2 CALLBACK_STRUCT_VERSION */
char requesting_before_after_ind;
char more_lob_data;
/* Version 3 CALLBACK_STRUCT_VERSION  */
ULibCharSet column_charset;
} column_def;

Eingabe

<column_value>

Ein Zeiger auf einen Puffer, um den zurückgegebenen Spaltenwert zu akzeptieren.

<max_value_length>

Die maximale Länge des zurückgegebenen Spaltenwertes. Normalerweise entspricht die maximale Länge der Länge des Spaltenwertpuffers. Wenn das ASCII-Format mit column_value_mode angegeben wird, ist der Spaltenwert nullbeendet, und die maximale Länge muss der maximalen Länge des Spaltenwertes entsprechen.

<column_index>

Der Spaltenindex des zurückzugebenden Spaltenwerts.

<column_value_mode>

Gibt das Format des Spaltenwertes an.

EXIT_FN_CHAR_FORMAT

ASCII-Format: Der Wert ist eine Null-beendete ASCII-Zeichenfolge (oder EBCDIC-Zeichenfolge) (mit einer bekannten Ausnahme für den Unterdatentyp UTF16_BE, der in UTF 8 konvertiert wird). Hinweis: Ein Spaltenwert kann abgeschnitten werden, wenn er einem User Exit angezeigt wird, da der Wert als ASCII-Zeichenfolge interpretiert wird und null-terminiert sein soll. Der erste Wert von 0 wird zum Zeichenfolgenabschlusszeichen.

EXIT_FN_RAW_FORMAT

Internes kanonisches Oracle GoldenGate-Format: Dieses Format enthält einen Zwei-Byte-Indikator NULL und gegebenenfalls eine Zwei-Byte-Variablendatenlänge. Oracle GoldenGate führt keine Zeichensatzkonvertierung für dieses Format für jeden Zeichendatentyp aus.

EXIT_FN_CNVTED_SESS_CHAR_FORMAT

User Exit-Zeichensatz: Gilt nur, wenn der Spaltendatentyp:

Dieses Format ist nicht Null-beendet.

<source_or_target>

Eine der folgenden Optionen gibt an, ob der Quell- oder der Zieldatensatz zum Abrufen des Spaltenwerts verwendet werden soll.

EXIT_FN_SOURCE_VAL
EXIT_FN_TARGET_VAL

<requesting_before_after_ind>

Wird bei der Verarbeitung eines Nachbilddatensatzes festgelegt, und Sie möchten den Vorbildspaltenwert entweder einer Aktualisierung oder einer Primärschlüsselaktualisierung verwenden.

Um den "before"-Wert der Spalte bei der Verarbeitung eines "After Image" einer Primärschlüsselaktualisierung oder eines regulären (Nicht-Schlüssel-)Aktualisierungsdatensatzes abzurufen, setzen Sie das Flag requesting_before_after_ind auf BEFORE_IMAGE_VAL.

Die Standardeinstellung ist AFTER_IMAGE_VAL (das After-Image der Spalte abrufen), wenn keine explizite Eingabe für requesting_before_after_ind angegeben ist.

Um ein Before Image verfügbar zu machen, können Sie den Parameter GETUPDATEBEFORES verwenden oder die Option INCLUDEUPDATEBEFORES in der Parameteranweisung CUSEREXIT verwenden.

Beachten Sie Folgendes:

<requesting_before_after_ind>

Um das Before-Image der Spalte abzurufen, setzen Sie das Flag char requesting_before_after_ind auf BEFORE_IMAGE_VAL. Um das After-Image abzurufen, setzen Sie es auf AFTER_IMAGE_VAL. Der Standardwert ist, immer mit dem After Image zu arbeiten, es sei denn, das Before wird angegeben.

Um die Before Images verfügbar zu machen, können Sie den Parameter GETUPDATEBEFORES für die TABLE-Anweisung verwenden, in der die Tabelle enthalten ist, oder Sie können die Option INCLUDEUPDATEBEFORES in der Parameteranweisung CUSEREXIT verwenden. Beide führen zum selben Callout für den User Exit für process_record.

Ausgabe

<column_value>

Ein Zeiger auf den zurückgegebenen Spaltenwert. Wenn column_value_mode als EXIT_FN_CHAR_FORMAT angegeben ist, wird der Spaltenwert als nullbeendete ASCII-Zeichenfolge zurückgegeben. Andernfalls wird der Spaltenwert im internen kanonischen Oracle GoldenGate-Format zurückgegeben. Im ASCII-Format werden Datumsangaben im folgenden Format zurückgegeben:

YYYY-MM-DD HH:MI:SS.FFFFFF

Die Einbeziehung von Bruchzeiten ist datenbankabhängig.

<actual_value_length>

Die Zeichenfolgenlänge des zurückgegebenen Spaltennamens in Byte. Die tatsächliche Länge enthält kein Null-Terminator, wenn column_value_mode als EXIT_FN_CHAR_FORMAT angegeben ist.

<null_value>

Ein Flag (0 oder 1), das angibt, ob der Spaltenwert Null ist. Wenn das Flag null_value 1 ist, wird der Spaltenwertpuffer mit null Byte gefüllt.

<value_truncated>

Ein Flag (0 oder 1), das angibt, ob der Wert abgeschnitten wurde. Das Abschneiden erfolgt, wenn die Länge des Spaltenwertes die maximale Pufferlänge überschreitet. Wenn column_value_mode als EXIT_FN_CHAR_FORMAT angegeben wurde, wird das Null-Terminator in die Länge der Spalte aufgenommen.

Zeichen more_lob_data

Ein Flag, das angibt, ob mehr LOB-Daten über die anfängliche 4K hinaus vorhanden sind, die im Basisdatensatz gespeichert werden können. Wenn eine LOB größer als der Grenzwert 4K ist, wird sie in LOB-Fragmenten gespeichert.

Sie müssen die entsprechende Speichermenge zuweisen, um die zurückgegebenen Werte enthalten zu können. Oracle GoldenGate greift jederzeit auf LOB-Spalten bis zu 8K von Daten zu und füllt den Puffer auf den Betrag auf, den der User Exit zugewiesen hat. Wenn LOB größer als der zugewiesene Wert ist, sind nachfolgende Callbacks erforderlich, um die gesamten Spaltendaten abzurufen, bis alle Daten an den User Exit gesendet wurden.

Um das Ende der Daten zu bestimmen, bewerten Sie more_lob_data. Beim User Exit wird dieses Flag auf CHAR_NO_VAL oder CHAR_YES_VAL gesetzt, bevor auf eine neue Spalte zugegriffen wird. Wenn dieses Flag nach dem ersten Callback noch initialisiert wird und nicht auf CHAR_YES_VAL oder CAR_NO_VAL gesetzt ist, gilt eine der folgenden Bedingungen:

Es wird empfohlen, die Metadaten der Quelltabelle abzurufen, um zu bestimmen, ob eine Spalte eine LOB sein kann.

Rückgabewerte

EXIT_FN_RET_BAD_COLUMN_DATA
EXIT_FN_RET_COLUMN_NOT_FOUND
EXIT_FN_RET_INVALID_COLUMN
EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_INVALID_PARAM
EXIT_FN_RET_OK