Valid For
Extract and Replicat
Description
Use the GET_RECORD_BUFFER
function to obtain information for custom column conversions. User exits can be used for data mapping between dissimilar source and target records when the COLMAP
option of the MAP
or TABLE
parameter is not sufficient. For example, you can use a user exit to convert a proprietary date field.
You can use the SET_RECORD_BUFFER
function (see "SET_RECORD_BUFFER") to modify the data retrieved with GET_RECORD_BUFFER
. However, it requires an understanding of the data record as written in the internal Oracle GoldenGate canonical format. As an alternative, you can set column values in the data record with the SET_COLUMN_VALUE_BY_INDEX
function (see "SET_COLUMN_VALUE_BY_INDEX") or the SET_COLUMN_VALUE_BY_NAME
function (see "STRNCMP").
Deletes, inserts and updates appear in the buffer as full record images.
Compressed SQL updates have the following format:
index length value [index length value ][...]
where:
index
is a two-byte index into the list of columns of the table (first column is zero).
length
is the two-byte length of the table.
value
is the actual column value, including one of the following two-byte null indicators when applicable. 0
is not null. -1
is null.
For SQL records, you can use the DECOMPRESS_RECORD
function ("DECOMPRESS_RECORD") to decompress the record for possible manipulation and then use the COMPRESS_RECORD
function ("COMPRESS_RECORD") to compress it again, as expected by the process.
Syntax
#include "usrdecs.h" short result_code; record_def record; ERCALLBACK (GET_RECORD_BUFFER, &record, &result_code);
Buffer
typedef struct { char *table_name; char *buffer; long length; char before_after_ind; short io_type; short record_type; short transaction_ind; int64_t timestamp; exit_ts_str io_datetime; short mapped; short source_or_target; /* Version 2 CALLBACK_STRUCT_VERSION */ char requesting_before_after_ind; } record_def;
Input
source_or_target
One of the following indicating whether to return the record buffer for the source or target data record.
EXIT_FN_SOURCE_VAL EXIT_FN_TARGET_VAL
requesting_before_after_ind
Optional. Set when requesting a record buffer on a record io_type of UPDATE_COMP_PK_SQL_VAL (
primary key update). Use one of the following to indicate which portion of the primary key update is to be accessed. The default is AFTER_IMAGE_VAL
.
BEFORE_IMAGE_VAL AFTER_IMAGE_VAL
Output
buffer
A pointer to the record buffer. Typically, buffer is a pointer to a buffer of type exit_rec_buf_def
. The exit_rec_buf_def
buffer contains the actual record about to be processed by Extract or Replicat. The buffer is supplied when the call type is EXIT_CALL_DISCARD_RECORD
. Exit routines can change the contents of this buffer, for example, to perform custom mapping functions.
The content of the record buffer is not converted to or from the character set of the user exit. It is passed as-is.
length
The returned length of the record buffer.
io_type
Returned as one of the following:
DDL type:
SQL_DDL_VAL
DML types:
DELETE_VAL INSERT_VAL UPDATE_VAL
Compressed SQL update:
UPDATE_COMP_SQL_VAL UPDATE_COMP_PK_SQL_VAL
Other:
TRUNCATE_TABLE_VAL
mapped
A flag (0
or 1
) indicating whether or not this is a mapped record buffer.
before_after_ind
One of the following to indicate whether the record is a before or after image.
BEFORE_IMAGE_VAL AFTER_IMAGE_VAL
Return Values
EXIT_FN_RET_INVALID_CONTEXT EXIT_FN_RET_INVALID_PARAM EXIT_FN_RET_OK