GET_RECORD_BUFFER
Valido per
Estrai e Replicat
Descrizione
Utilizzare la funzione GET_RECORD_BUFFER per ottenere informazioni sulle conversioni di colonne personalizzate. Le uscite utente possono essere utilizzate per il mapping dei dati tra record di origine e di destinazione diversi quando l'opzione COLMAP del parametro MAP o TABLE non è sufficiente. Ad esempio, è possibile utilizzare un'uscita utente per convertire un campo data proprietario.
Per modificare i dati recuperati con GET_RECORD_BUFFER è possibile utilizzare la funzione SET_RECORD_BUFFER (vedere "SET_RECORD_BUFFER"). Tuttavia, è necessario comprendere il record di dati come scritto nel formato canonico interno di Oracle GoldenGate. In alternativa, è possibile impostare i valori di colonna nel record di dati con la funzione SET_COLUMN_VALUE_BY_INDEX (vedere) o la funzione SET_COLUMN_VALUE_BY_NAME (vedere "@STRNCMP").
Le eliminazioni, gli inserimenti e gli aggiornamenti vengono visualizzati nel buffer come immagini di record complete.
Gli aggiornamenti SQL compressi hanno il seguente formato:
<index> <length> <value> [<index> <length> <value> ][...]
dove:
-
<index>è un indice a due byte nell'elenco delle colonne della tabella (la prima colonna è zero). -
<length>è la lunghezza di due byte della tabella. -
<value>è il valore di colonna effettivo, incluso uno dei seguenti indicatori nulli a due byte, se applicabile.0non è nullo.-1è nullo.
Per i record SQL, è possibile utilizzare la funzione DECOMPRESS_RECORD ("DECOMPRESS_RECORD") per decomprimere il record per una possibile manipolazione e quindi utilizzare la funzione COMPRESS_RECORD ("COMPRESS_RECORD") per comprimerlo di nuovo, come previsto dal processo.
Sintassi
#include "usrdecs.h"
short result_code;
record_def record;
ERCALLBACK (GET_RECORD_BUFFER, &record, &result_code);
Buffer
typedef struct
{
char *table_name;
char *buffer;
long length;
char before_after_ind;
short io_type;
short record_type;
short transaction_ind;
int64_t timestamp;
exit_ts_str io_datetime;
short mapped;
short source_or_target;
/* Version 2 CALLBACK_STRUCT_VERSION */
char requesting_before_after_ind;
} record_def;
Input
<source_or_target>
Una delle seguenti opzioni indica se restituire il buffer di record per il record di dati di origine o di destinazione.
EXIT_FN_SOURCE_VAL
EXIT_FN_TARGET_VAL
<requesting_before_after_ind>
Facoltativa. Imposta quando si richiede un buffer di record in un record io_type di aggiornamento della chiave primaria UPDATE_COMP_PK_SQL_VAL (). Utilizzare una delle seguenti opzioni per indicare a quale parte dell'aggiornamento della chiave primaria è necessario accedere. L'impostazione predefinita è AFTER_IMAGE_VAL.
BEFORE_IMAGE_VAL
AFTER_IMAGE_VAL
Output
<buffer>
Puntatore al buffer dei record. In genere, il buffer è un puntatore a un buffer di tipo exit_rec_buf_def. Il buffer exit_rec_buf_def contiene il record effettivo che verrà elaborato da Extract o Replicat. Il buffer viene fornito quando il tipo di chiamata è EXIT_CALL_DISCARD_RECORD. Le routine di uscita possono modificare il contenuto di questo buffer, ad esempio per eseguire funzioni di mapping personalizzate.
Il contenuto del buffer di record non viene convertito nel o dal set di caratteri dell'uscita utente. È passato così com'è.
<length>
La lunghezza restituita del buffer di record.
<io_type>
Restituito come uno dei seguenti:
- Tipo
DDL:
SQL_DDL_VAL
- Tipi
DML:
DELETE_VAL
INSERT_VAL
UPDATE_VAL
- Aggiornamento SQL compresso:
UPDATE_COMP_SQL_VAL
UPDATE_COMP_PK_SQL_VAL
- Altro:
TRUNCATE_TABLE_VAL
<mapped>
Flag (0 o 1) che indica se si tratta o meno di un buffer di record mappato.
<before_after_ind>
Uno dei seguenti elementi per indicare se il record è un'immagine precedente o successiva.
BEFORE_IMAGE_VAL
AFTER_IMAGE_VAL
Valori restituiti
EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_INVALID_PARAM
EXIT_FN_RET_OK