GET_RECORD_BUFFER
Válido Para
Extract e Replicat
Descrição
Use a função GET_RECORD_BUFFER para obter informações para conversões de coluna personalizadas. As saídas do usuário podem ser usadas para mapeamento de dados entre registros de origem e destino diferentes quando a opção COLMAP do parâmetro MAP ou TABLE não for suficiente. Por exemplo, você pode usar uma saída de usuário para converter um campo de data proprietário.
Você pode usar a função SET_RECORD_BUFFER (consulte "SET_RECORD_BUFFER") para modificar os dados recuperados com GET_RECORD_BUFFER. No entanto, isso requer uma compreensão do registro de dados conforme escrito no formato canônico interno do Oracle GoldenGate. Como alternativa, você pode definir valores de coluna no registro de dados com a função SET_COLUMN_VALUE_BY_INDEX (consulte) ou a função SET_COLUMN_VALUE_BY_NAME (consulte "@STRNCMP").
As exclusões, inserções e atualizações aparecem no buffer como imagens de registro completo.
As atualizações SQL compactadas têm o seguinte formato:
<index> <length> <value> [<index> <length> <value> ][...]
onde:
-
<index>é um índice de dois bytes na lista de colunas da tabela (a primeira coluna é zero). -
<length>é o comprimento de dois bytes da tabela. -
<value>é o valor da coluna real, incluindo um dos indicadores nulos de dois bytes a seguir quando aplicável.0não é nulo.-1é nulo.
Para registros SQL, você pode usar a função DECOMPRESS_RECORD ("DECOMPRESS_RECORD") para descompactar o registro para possível manipulação e, em seguida, usar a função COMPRESS_RECORD ("COMPRESS_RECORD") para compactá-lo novamente, conforme esperado pelo processo.
Sintaxe
#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;
Entrada
<source_or_target>
Uma das opções a seguir indica se o buffer de registro deve ser retornado para o registro de dados de origem ou de destino.
EXIT_FN_SOURCE_VAL
EXIT_FN_TARGET_VAL
<requesting_before_after_ind>
Opcional. Defina ao solicitar um buffer de registro em um registro io_type de atualização de chave primária UPDATE_COMP_PK_SQL_VAL (). Use uma das opções a seguir para indicar qual parte da atualização de chave primária deve ser acessada. A predefinição é AFTER_IMAGE_VAL.
BEFORE_IMAGE_VAL
AFTER_IMAGE_VAL
Saída
<buffer>
Um ponteiro para o buffer de registro. Normalmente, buffer é um ponteiro para um buffer do tipo exit_rec_buf_def. O buffer exit_rec_buf_def contém o registro real prestes a ser processado pelo processo Extract ou Replicat. O buffer é fornecido quando o tipo de chamada é EXIT_CALL_DISCARD_RECORD. Rotinas de saída podem alterar o conteúdo deste buffer, por exemplo, para executar funções de mapeamento personalizadas.
O conteúdo do buffer de registro não é convertido para ou a partir do conjunto de caracteres da saída do usuário. Foi informado como está.
<length>
O comprimento retornado do buffer de registro.
<io_type>
Retornada como uma das seguintes opções:
DDLtipo:
SQL_DDL_VAL
- Tipos
DML:
DELETE_VAL
INSERT_VAL
UPDATE_VAL
- Atualização SQL compactada:
UPDATE_COMP_SQL_VAL
UPDATE_COMP_PK_SQL_VAL
- Outro:
TRUNCATE_TABLE_VAL
<mapped>
Um flag (0 ou 1) indicando se este é ou não um buffer de registro mapeado.
<before_after_ind>
Uma das opções a seguir indica se o registro é uma imagem anterior ou posterior.
BEFORE_IMAGE_VAL
AFTER_IMAGE_VAL
Valores de Retorno
EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_INVALID_PARAM
EXIT_FN_RET_OK