GET_COLUMN_VALUE_FROM_INDEX

Valido per

Estrai e Replicat

Descrizione

Utilizzare la funzione GET_COLUMN_VALUE_FROM_INDEX per recuperare il valore della colonna dal record di dati utilizzando l'indice di 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. È possibile specificare il formato carattere del valore restituito.

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:

Sintassi

#include "usrdecs.h"
short result_code;
column_def column;
ERCALLBACK (GET_COLUMN_VALUE_FROM_INDEX, &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 il formato ASCII è specificato con column_value_mode, il valore della colonna è null-terminated e la lunghezza massima deve essere uguale alla lunghezza massima del valore della colonna.

<column_index>

Indice di colonna del valore di colonna da restituire.

<column_value_mode>

Indica il formato 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 NULL a due byte e una lunghezza dei dati delle variabili 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 il valore della colonna prima dell'immagine sia un aggiornamento o un aggiornamento 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.

<requesting_before_after_ind>

Per ottenere l'immagine precedente della colonna, impostare il flag char requesting_before_after_ind su BEFORE_IMAGE_VAL. Per ottenere l'immagine successiva, impostarla su AFTER_IMAGE_VAL. L'impostazione predefinita prevede di utilizzare sempre l'immagine successiva a meno che non venga specificato il valore precedente.

Per rendere disponibili le immagini precedenti, è possibile utilizzare il parametro GETUPDATEBEFORES per l'istruzione TABLE che contiene la tabella oppure l'opzione INCLUDEUPDATEBEFORES nell'istruzione del parametro CUSEREXIT. Entrambi causeranno lo stesso callout all'uscita utente per process_record.

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 terminazione nulla; 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:

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

L'inclusione del tempo frazionario dipende dal database.

<actual_value_length>

Lunghezza della stringa del nome colonna restituito, espressa in byte. 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 CHAR_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