GET_COLUMN_VALUE_FROM_NAME

Durée de validité

Extraction et réplication

Description

Utilisez la fonction GET_COLUMN_VALUE_FROM_NAME pour extraire la valeur de colonne de l'enregistrement de données à l'aide du nom de colonne indiqué. Les valeurs de colonne constituent la base de la plupart des logiques au sein de l'exit utilisateur. Vous pouvez baser une logique complexe sur les valeurs de colonnes individuelles de l'enregistrement de données.

Si la session de caractères de l'exit utilisateur est définie avec SET_SESSION_CHARSET sur une valeur autre que le jeu de caractères par défaut du système d'exploitation, tel que défini dans ULIB_CS_DEFAULT dans le fichier ucharset.h, les données de caractères échangées entre l'exit utilisateur et le processus sont interprétées dans le jeu de caractères de session.

Une valeur de colonne est définie sur le jeu de caractères de session uniquement si la condition suivante est remplie :

Si la base de données fait la distinction entre les majuscules et les minuscules, les noms d'objet doivent être indiqués dans la même lettre que ceux définis dans la base de données d'hébergement. Sinon, la casse n'a pas d'importance.

Syntaxe

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

Tampon

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;

Entrée

<column_value>

Pointeur vers un tampon pour accepter la valeur de colonne renvoyée.

<max_value_length>

Longueur maximale de la valeur de colonne renvoyée. En général, la longueur maximale est la longueur du tampon de valeurs de colonne. Si le format ASCII est indiqué (voir column_value_mode), la valeur de la colonne est terminée avec la valeur NULL et la longueur maximale doit être égale à la longueur maximale de la valeur de la colonne.

<column_name>

Nom de la colonne pour la valeur de colonne à renvoyer.

<column_value_mode>

Indique le jeu de caractères de la valeur de colonne.

EXIT_FN_CHAR_FORMAT

Format ASCII : la valeur est une chaîne ASCII (ou EBCDIC) à terminaison NULL (avec une exception connue pour le type de sous-données UTF16_BE, qui est converti en UTF 8). Remarque : Une valeur de colonne peut être tronquée lorsqu'elle est présentée à un user exit, car elle est interprétée comme une chaîne ASCII et est censée être terminée par une valeur NULL. La première valeur de 0 devient le caractère de fin de chaîne.

EXIT_FN_RAW_FORMAT

Format canonique Oracle GoldenGate interne : ce format inclut un indicateur NULL de deux octets et une longueur de données variable de deux octets, le cas échéant. Oracle GoldenGate n'effectue aucune conversion de jeu de caractères pour ce format, quel que soit le type de données.

EXIT_FN_CNVTED_SESS_CHAR_FORMAT

Jeu de caractères de sortie utilisateur : s'applique uniquement si le type de données de colonne est :

Ce format ne prend pas fin avec la valeur NULL.

<source_or_target>

L'un des éléments suivants indique si l'enregistrement de données source ou cible doit être utilisé pour extraire la valeur de colonne.

EXIT_FN_SOURCE_VAL
EXIT_FN_TARGET_VAL

<requesting_before_after_ind>

Défini lors du traitement d'un enregistrement d'image après et que vous souhaitez utiliser les colonnes avant d'une mise à jour ou d'une mise à jour de clé primaire.

Pour obtenir la valeur "avant" de la colonne lors du traitement d'une image "après" d'une mise à jour de clé primaire ou d'un enregistrement de mise à jour standard (sans clé), définissez l'indicateur requesting_before_after_ind sur BEFORE_IMAGE_VAL.

Le paramètre par défaut est AFTER_IMAGE_VAL (obtenir l'image après de la colonne) lorsqu'aucune entrée explicite pour requesting_before_after_ind n'est indiquée.

Pour rendre une image before disponible, vous pouvez utiliser le paramètre GETUPDATEBEFORES ou l'option INCLUDEUPDATEBEFORES dans l'instruction de paramètre CUSEREXIT.

Tenez compte des points suivants :

Sortie

<column_value>

Pointeur vers la valeur de colonne renvoyée. Si column_value_mode est spécifié en tant que EXIT_FN_CHAR_FORMAT, la valeur de colonne est renvoyée sous la forme d'une chaîne ASCII à terminaison NULL ; sinon, la valeur de colonne est renvoyée au format canonique interne d'Oracle GoldenGate. Au format ASCII, les dates sont renvoyées au format suivant :

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

L'inclusion du temps fractionné dépend de la base de données.

longueur réelle

Longueur de chaîne du nom de colonne renvoyé. La longueur réelle n'inclut pas de terminaison NULL lorsque column_value_mode est indiqué en tant que EXIT_FN_CHAR_FORMAT.

<null_value>

Indicateur (0 ou 1) indiquant si la valeur de colonne est NULL. Si l'indicateur null_value est 1, le tampon de valeur de colonne est rempli avec des octets NULL.

<value_truncated>

Indicateur (0 ou 1) indiquant si la valeur a été tronquée ou non. La troncature se produit si la longueur de la valeur de colonne dépasse la longueur maximale du tampon. Si column_value_mode a été indiqué en tant que EXIT_FN_CHAR_FORMAT, le terminaison NULL est inclus dans la longueur de la colonne.

caractère more_lob_data

Indicateur signalant si plus de données LOB sont présentes au-delà de la valeur 4K initiale qui peut être stockée dans l'enregistrement de base. Lorsqu'une valeur LOB est supérieure à la limite 4K, elle est stockée dans des fragments LOB.

Vous devez allouer la quantité de mémoire appropriée pour contenir les valeurs renvoyées. Oracle GoldenGate accédera à tout moment aux colonnes LOB jusqu'à 8K de données, en remplissant la mémoire tampon jusqu'à la quantité allouée par l'exit utilisateur. Si la valeur LOB est supérieure à celle qui a été allouée, les rappels suivants sont requis pour obtenir le total des données de colonne, jusqu'à ce que toutes les données aient été envoyées à l'exit utilisateur.

Pour déterminer la fin des données, évaluez more_lob_data. L'exit utilisateur définit cet indicateur sur CAR_NO_VAL ou CHAR_YES_VAL avant d'accéder à une nouvelle colonne. Si cet indicateur est toujours initialisé après le premier rappel et n'est pas défini sur CHAR_YES_VAL ou CAR_NO_VAL, l'une des conditions suivantes est remplie :

Il est recommandé d'obtenir les métadonnées de la table source pour déterminer si une colonne peut être une colonne LOB.

Valeurs retournées

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

Exemple

memset (&col_meta, 0, sizeof(col_meta));
if (record.mapped)
col_meta.source_or_target = EXIT_FN_TARGET_VAL;
else
col_meta.source_or_target = EXIT_FN_SOURCE_VAL;
col_meta.source_or_target = EXIT_FN_SOURCE_VAL;
col_meta.column_name = (char *)malloc(100);
col_meta.max_name_length = 100;
col_meta.column_index = 1;

call_callback (GET_COL_METADATA_FROM_NAME, &col_meta, &result_code);