GET_RECORD_BUFFER
Válido para
Extraer y Replicat
Descripción
Utilice la función GET_RECORD_BUFFER para obtener información sobre las conversiones de columnas personalizadas. Las salidas de usuario se pueden utilizar para la asignación de datos entre registros de origen y destino distintos cuando la opción COLMAP del parámetro MAP o TABLE no es suficiente. Por ejemplo, puede utilizar una salida de usuario para convertir un campo de fecha propietario.
Puede utilizar la función SET_RECORD_BUFFER (consulte "SET_RECORD_BUFFER") para modificar los datos recuperados con GET_RECORD_BUFFER. Sin embargo, necesita comprender el registro de datos tal y como está escrito en el formato canónico interno de Oracle GoldenGate. Como alternativa, puede definir valores de columna en el registro de datos con la función SET_COLUMN_VALUE_BY_INDEX (consulte) o la función SET_COLUMN_VALUE_BY_NAME (consulte "@STRNCMP").
Las supresiones, inserciones y actualizaciones aparecen en el buffer como imágenes de registro completo.
Las actualizaciones SQL comprimidas tienen el siguiente formato:
<index> <length> <value> [<index> <length> <value> ][...]
donde:
-
<index>es un índice de dos bytes en la lista de columnas de la tabla (la primera columna es cero). -
<length>es la longitud de dos bytes de la tabla. -
<value>es el valor de columna real, incluido uno de los siguientes indicadores nulos de dos bytes cuando corresponda.0no es nulo.-1es nulo.
Para los registros SQL, puede utilizar la función DECOMPRESS_RECORD ("DECOMPRESS_RECORD") para descomprimir el registro para una posible manipulación y, a continuación, utilizar la función COMPRESS_RECORD ("COMPRESS_RECORD") para comprimirlo de nuevo, según lo esperado por el proceso.
Sintaxis
#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;
Entrada
<source_or_target>
Una de las siguientes indicaciones indica si se debe devolver el buffer de registro para el registro de datos de origen o de destino.
EXIT_FN_SOURCE_VAL
EXIT_FN_TARGET_VAL
<requesting_before_after_ind>
Opcional. Se define al solicitar un buffer de registro en un registro io_type de UPDATE_COMP_PK_SQL_VAL (actualización de clave primaria). Utilice una de las siguientes opciones para indicar a qué parte de la actualización de clave primaria se debe acceder. El valor por defecto es AFTER_IMAGE_VAL.
BEFORE_IMAGE_VAL
AFTER_IMAGE_VAL
Salida
<buffer>
Un puntero al buffer de registro. Normalmente, el buffer es un puntero a un buffer de tipo exit_rec_buf_def. El buffer exit_rec_buf_def contiene el registro real que va a procesar Extract o Replicat. El buffer se proporciona cuando el tipo de llamada es EXIT_CALL_DISCARD_RECORD. Las rutinas de salida pueden cambiar el contenido de este buffer, por ejemplo, para realizar funciones de asignación personalizadas.
El contenido del buffer de registro no se convierte en el juego de caracteres de la salida de usuario ni desde él. Se aprueba tal cual.
<length>
Longitud devuelta del buffer de registro.
<io_type>
Se ha devuelto como una de las siguientes opciones:
- Tipo
DDL:
SQL_DDL_VAL
- Tipos
DML:
DELETE_VAL
INSERT_VAL
UPDATE_VAL
- Actualización SQL comprimida:
UPDATE_COMP_SQL_VAL
UPDATE_COMP_PK_SQL_VAL
- Otro:
TRUNCATE_TABLE_VAL
<mapped>
Indicador (0 o 1) que indica si se trata o no de un buffer de registro asignado.
<before_after_ind>
Una de las siguientes opciones para indicar si el registro es una imagen anterior o posterior.
BEFORE_IMAGE_VAL
AFTER_IMAGE_VAL
Valores devueltos
EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_INVALID_PARAM
EXIT_FN_RET_OK