GET_COLUMN_VALUE_FROM_NAME

Valido per

Estrai e Replicat

Descrizione

Utilizzare la funzione GET_COLUMN_VALUE_FROM_NAME per recuperare il valore della colonna dal record di dati utilizzando il nome della colonna specificato. I valori di colonna sono alla base della maggior parte della logica all'interno dell'uscita utente. È possibile basare una logica complessa sui valori delle singole colonne all'interno del record di dati.

Se la sessione dei caratteri dell'uscita utente è impostata con SET_SESSION_CHARSET su un valore diverso dal set di caratteri predefinito del sistema operativo, come definito in ULIB_CS_DEFAULT nel file ucharset.h, i dati dei caratteri scambiati tra l'uscita utente e il processo vengono interpretati nel set di caratteri della sessione.

Un valore di colonna viene impostato sul set di caratteri della sessione solo se è vero quanto segue:

Se il database fa distinzione tra maiuscole e minuscole, i nomi degli oggetti devono essere specificati nella stessa lettera maiuscola definita nel database di hosting; in caso contrario, il caso non importa.

Sintassi

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

Buffer

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;

Input

<column_value>

Un puntatore a un buffer per accettare il valore di colonna restituito.

<max_value_length>

La lunghezza massima del valore di colonna restituito. In genere, la lunghezza massima è la lunghezza del buffer dei valori di colonna. Se è specificato il formato ASCII (vedere column_value_mode), il valore della colonna è null-terminated e la lunghezza massima deve essere uguale alla lunghezza massima del valore della colonna.

<column_name>

Il nome della colonna per il valore della colonna da restituire.

<column_value_mode>

Indica il set di caratteri del valore della colonna.

EXIT_FN_CHAR_FORMAT

Formato ASCII: il valore è una stringa ASCII (o EBCDIC) con terminazione nulla (con un'eccezione nota per il tipo di dati secondari UTF16_BE, che viene convertito in UTF 8). Nota: un valore di colonna potrebbe essere troncato quando viene presentato a un'uscita utente, perché il valore viene interpretato come una stringa ASCII e dovrebbe essere nullo. Il primo valore di 0 diventa il terminatore di stringa.

EXIT_FN_RAW_FORMAT

Formato canonico interno di Oracle GoldenGate: questo formato include un indicatore nullo a due byte e una lunghezza dei dati della variabile a due byte, se applicabile. Oracle GoldenGate non esegue alcuna conversione del set di caratteri per questo formato per alcun tipo di dati carattere.

EXIT_FN_CNVTED_SESS_CHAR_FORMAT

Set di caratteri di uscita utente: si applica solo se il tipo di dati della colonna è:

Questo formato non è nullo.

<source_or_target>

Una delle seguenti opzioni indica se utilizzare il record di dati di origine o di destinazione per recuperare il valore della colonna.

EXIT_FN_SOURCE_VAL
EXIT_FN_TARGET_VAL

<requesting_before_after_ind>

Impostare quando si elabora un record immagine successivo e si desidera che le colonne precedenti di un aggiornamento o di una chiave primaria.

Per ottenere il valore "prima" della colonna durante l'elaborazione di un "dopo l'immagine" di un aggiornamento della chiave primaria o di un record di aggiornamento regolare (non chiave), impostare il flag requesting_before_after_ind su BEFORE_IMAGE_VAL.

L'impostazione predefinita è AFTER_IMAGE_VAL (ottenere l'immagine successiva della colonna) quando non viene specificato un input esplicito per requesting_before_after_ind.

Per rendere disponibile un'immagine precedente, è possibile utilizzare il parametro GETUPDATEBEFORES oppure l'opzione INCLUDEUPDATEBEFORES nell'istruzione del parametro CUSEREXIT.

Tenere presente quanto segue.

Output

<column_value>

Un puntatore al valore di colonna restituito. Se column_value_mode è specificato come EXIT_FN_CHAR_FORMAT, il valore della colonna viene restituito come stringa ASCII con termine nullo; in caso contrario, il valore della colonna viene restituito nel formato canonico interno di Oracle GoldenGate. Nel formato ASCII, le date vengono restituite nel seguente formato:

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

L'inclusione del tempo frazionario dipende dal database.

lunghezza effettiva

La lunghezza della stringa del nome colonna restituito. La lunghezza effettiva non include un terminatore nullo quando column_value_mode è specificato come EXIT_FN_CHAR_FORMAT.

<null_value>

Flag (0 o 1) che indica se il valore della colonna è nullo. Se il flag null_value è 1, il buffer dei valori delle colonne viene riempito con byte nulli.

<value_truncated>

Flag (0 o 1) che indica se il valore è stato troncato o meno. Il troncamento si verifica se la lunghezza del valore della colonna supera la lunghezza massima del buffer. Se column_value_mode è stato specificato come EXIT_FN_CHAR_FORMAT, il terminatore nullo viene incluso nella lunghezza della colonna.

carattere more_lob_data

Flag che indica se sono presenti più dati LOB oltre il valore 4K iniziale che possono essere memorizzati nel record di base. Quando un valore LOB è maggiore del limite 4K, viene memorizzato in frammenti LOB.

È necessario allocare la quantità di memoria appropriata per contenere i valori restituiti. Oracle GoldenGate accederà sempre alle colonne LOB fino a 8K di dati, compilando il buffer fino alla quantità allocata dall'uscita utente. Se il valore di LOB è maggiore di quello allocato, i callback successivi sono necessari per ottenere il totale dei dati della colonna, fino a quando tutti i dati non saranno stati inviati all'uscita utente.

Per determinare la fine dei dati, valutare more_lob_data. L'uscita utente imposta questo flag su CAR_NO_VAL o CHAR_YES_VAL prima di accedere a una nuova colonna. Se questo flag viene ancora inizializzato dopo la prima richiamata e non è impostato su CHAR_YES_VAL o CAR_NO_VAL, si verifica una delle seguenti condizioni:

Si consiglia di ottenere i metadati della tabella di origine per determinare se una colonna può essere LOB.

Valori restituiti

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

Esempio

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);