DECOMPRESS_RECORD
Durée de validité
Extraction et réplication
Description
Utilisez la fonction DECOMPRESS_RECORD lorsque vous souhaitez extraire ou manipuler l'intégralité d'un enregistrement de mise à jour avec la fonction GET_RECORD_BUFFER (voir "GET_RECORD_BUFFER") ou la fonction SET_RECORD_BUFFER (voir) et que l'enregistrement est compressé. DECOMPRESS_RECORD facilite le traitement et la mise en correspondance des enregistrements compressés en les plaçant dans leur présentation de colonne logique. Les colonnes qui sont présentes seront dans les positions attendues sans les indicateurs d'index et de longueur (voir "Format d'enregistrement compressé"). Les colonnes manquantes seront représentées par des zéros. Lorsqu'elle est utilisée, DECOMPRESS_RECORD doit être appelé avant toute manipulation. Une fois le traitement de l'exit utilisateur terminé, utilisez la fonction COMPRESS_RECORD (voir) pour compresser à nouveau l'enregistrement avant de le renvoyer au processus Oracle GoldenGate.
Cette fonction est valide pour le traitement des opérations UPDATE uniquement. Les suppressions, insertions et mises à jour apparaissent dans le tampon sous forme d'images d'enregistrement complet.
Le contenu du tampon d'enregistrement n'est pas converti dans ou depuis le jeu de caractères de l'exit utilisateur. Il est transmis tel quel.
Format d'enregistrement compressé
Les mises à jour SQL compressées ont le format suivant :
<index> <length> <value> [<index> <length> <value> ][...]
où :
-
<index>est un index à deux octets inclus dans la liste des colonnes de la table (la première colonne est zéro). -
<length>correspond à la longueur de deux octets de la table. -
<value>est la valeur de colonne réelle, avec l'un des indicateurs NULL de deux octets suivants, le cas échéant.0n'est pas NULL.-1est NULL.
Syntaxe
#include "usrdecs.h"
short result_code;
compressed_rec_def compressed_rec;
ERCALLBACK (DECOMPRESS_RECORD, &compressed_rec, &result_code);
Tampon
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;
Entrée
<compressed_rec>
Pointeur vers l'enregistrement au format compressé. Utilisez la fonction GET_RECORD_BUFFER pour obtenir cette valeur (reportez-vous à "GET_RECORD_BUFFER").
<compressed_len>
Longueur de l'enregistrement compressé. Utilisez la fonction GET_RECORD_BUFFER (voir "GET_RECORD_BUFFER") ou GET_RECORD_LENGTH (voir) pour obtenir cette valeur.
<source_or_target>
L'une des options suivantes indique si l'enregistrement source ou cible est en cours de décompression.
EXIT_FN_SOURCE_VAL
EXIT_FN_TARGET_VAL
<requesting_before_after_ind>
Utilisé comme entrée interne. Il n'est pas nécessaire de définir. Si elle est définie, elle sera ignorée.
Sortie
<decompressed_rec>
Pointeur vers l'enregistrement renvoyé au format décompressé. L'enregistrement est supposé être au format canonique interne d'Oracle GoldenGate. L'appelant doit s'assurer que la quantité de mémoire appropriée est allouée à decompressed_rec.
<decompressed_len>
Longueur renvoyée de l'enregistrement décompressé.
<columns_present>
Tableau de valeurs indiquant les colonnes présentes dans l'enregistrement compressé. Par exemple, si la première, la troisième et la sixième colonnes existent dans l'enregistrement compressé et que le nombre total de colonnes dans la table est de sept, le tableau doit contenir les éléments suivants :
1, 0, 1, 0, 0, 1, 0
Ce tableau aide les fonctions de mise en correspondance à déterminer quand et si une colonne compressée doit être mise en correspondance.
Valeurs retournées
EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_OK
EXIT_FN_RET_INVALID_PARAM