DECOMPRESS_RECORD
Válido para
Extraer y Replicat
Descripción
Utilice la función DECOMPRESS_RECORD cuando desee recuperar o manipular un registro de actualización completo con la función GET_RECORD_BUFFER (consulte "GET_RECORD_BUFFER") o la función SET_RECORD_BUFFER (consulte) y el registro esté comprimido. DECOMPRESS_RECORD hace que los registros comprimidos sean más fáciles de procesar y asignar poniendo el registro en su diseño de columna lógica. Las columnas que están presentes estarán en las posiciones esperadas sin los indicadores de índice y longitud (consulte "Formato de Registro Comprimido"). Las columnas que faltan se representarán como ceros. Cuando se utiliza, se debe llamar a DECOMPRESS_RECORD antes de que se produzca cualquier manipulación. Una vez finalizado el procesamiento de salida de usuario, utilice la función COMPRESS_RECORD (consulte) para volver a comprimir el registro antes de devolverlo al proceso de Oracle GoldenGate.
Esta función es válida solo para procesar operaciones UPDATE. Las supresiones, inserciones y actualizaciones aparecen en el buffer como imágenes de registro completo.
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.
Formato de registro comprimido
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.
Sintaxis
#include "usrdecs.h"
short result_code;
compressed_rec_def compressed_rec;
ERCALLBACK (DECOMPRESS_RECORD, &compressed_rec, &result_code);
Buffer
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;
Entrada
<compressed_rec>
Puntero al registro en formato comprimido. Utilice la función GET_RECORD_BUFFER para obtener este valor (consulte "GET_RECORD_BUFFER").
<compressed_len>
La longitud del registro comprimido. Utilice la función GET_RECORD_BUFFER (consulte "GET_RECORD_BUFFER") o GET_RECORD_LENGTH (consulte) para obtener este valor.
<source_or_target>
Una de las siguientes opciones para indicar si el registro de origen o de destino se está descomprimiendo.
EXIT_FN_SOURCE_VAL
EXIT_FN_TARGET_VAL
<requesting_before_after_ind>
Se utiliza como entrada interna. No es necesario definirlo. Si se establece, se ignorará.
Salida
<decompressed_rec>
Un puntero al registro devuelto en formato descomprimido. Se supone que el registro está en el formato canónico interno de Oracle GoldenGate. El emisor de llamada debe asegurarse de que la cantidad adecuada de memoria esté asignada a decompressed_rec.
<decompressed_len>
Longitud devuelta del registro descomprimido.
<columns_present>
Matriz de valores que indica las columnas presentes en el registro comprimido. Por ejemplo, si la primera, tercera y sexta columnas existen en el registro comprimido y el número total de columnas de la tabla es siete, la matriz debe contener:
1, 0, 1, 0, 0, 1, 0
Esta matriz ayuda a las funciones de asignación a determinar cuándo y si se debe asignar una columna comprimida.
Valores devueltos
EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_OK
EXIT_FN_RET_INVALID_PARAM