Usando ERCALLBACK

ERCALLBACK é a função básica de saída de usuário do Oracle GoldenGate. Ele é usado para extrair o contexto do registro para a saída do usuário. É como um pacote que contém várias funções individuais dentro dele. Você pode chamar essas funções e obter valores de retorno. Por exemplo, funções como GET_BEFORE_AFTER_IND ou GET_COLUMN_VALUE_FROM_NAME podem ser chamadas. Essas funções são chamadas de function_code.

Sintaxe

ERCALLBACK (<function_code>, <buffer>, <result_code> );

<function_code>

A função a ser executada pela rotina de callback. A rotina de callback do usuário se comporta de forma diferente com base no código de função passado para a rotina de callback. Embora algumas funções possam ser usadas para Extract e Replicat, a validade da função em um processo ou outro depende dos parâmetros de entrada definidos para essa função durante a rotina de callback. Consulte Códigos de Função para obter uma descrição completa dos códigos de função disponíveis.

<buffer>

Um ponteiro de void para um buffer que contém uma estrutura predefinida associada ao código de função especificado.

<result_code>

O status da função executada pela rotina de callback. O código de resultado retornado pela rotina de callback indica se a função de callback foi ou não bem-sucedida. Um código de resultado pode ser um dos valores na Tabela 4-4.

Tabela 4 Códigos de Resultado

Código Descrição
EXIT_FN_RET_BAD_COLUMN_DATA Foram encontrados dados inválidos ao recuperar ou definir dados da coluna.
EXIT_FN_RET_BAD_DATE_TIME Uma coluna of do tipo de data, timestamp ou intervalo contém um valor de data ou hora inválido.
EXIT_FN_RET_BAD_NUMERIC_VALUE Um tipo numérico de coluna contém um valor numérico inválido.
EXIT_FN_RET_COLUMN_NOT_FOUND A coluna não foi encontrada em um registro de atualização compactado (atualização por um banco de dados que registra apenas os valores que foram alterados).
EXIT_FN_RET_ENV_NOT_FOUND Não foi possível encontrar o valor do ambiente especificado no registro.
EXIT_FN_RET_EXCEEDED_MAX_LENGTH Não foi possível recuperar os metadados porque o nome da tabela ou da coluna não coube no buffer alocado.
EXIT_FN_RET_FETCH_ERROR Não foi possível extrair o registro. Visualize a mensagem de erro para ver o motivo.
EXIT_FN_RET_INCOMPLETE_DDL_REC Ocorreu um erro interno ao processar o registro DDL. O registro provavelmente está incompleto.
EXIT_FN_RET_INVALID_CALLBACK_FNC_CD Um código de função de callback inválido foi passado para a rotina de callback.
EXIT_FN_RET_INVALID_COLUMN Uma coluna inexistente foi mencionada na chamada de função.
EXIT_FN_RET_INVALID_COLUMN_TYPE A rotina está tentando manipular um tipo de dados que não é suportado pelo Oracle GoldenGate para essa finalidade.
EXIT_FN_RET_INVALID_CONTEXT A função de callback foi chamada em um momento impróprio.
EXIT_FN_RET_INVALID_PARAM Um parâmetro inválido foi informado para a função de callback.
EXIT_FN_RET_NO_SRCDB_INSTANCE Não foi possível encontrar a instância do banco de dados de origem.
EXIT_FN_RET_NO_TGTDB_INSTANCE Não foi possível encontrar a instância do banco de dados de destino.
EXIT_FN_RET_NOT_SUPPORTED Esta função não é suportada para este processo.
EXIT_FN_RET_OK A função de callback foi bem-sucedida.
EXIT_FN_RET_SESSION_CS_CNV_ERR Um erro ULIB_ERR_INVALID_CHAR_FOUND foi retornado para a rotina de conversão do conjunto de caracteres. Falha na conversão.
EXIT_FN_RET_TABLE_NOT_FOUND Um nome de tabela inválido foi especificado.
EXIT_FN_RET_TOKEN_NOT_FOUND Não foi possível encontrar o token de usuário especificado no registro.

Você pode usar ERCALLBACK para executar muitas chamadas de função diferentes. Por exemplo, se quiser obter o nome de uma tabela, você pode usar o seguinte comando:

ERCALLBACK (GET_TABLE_NAME, &var, &result_code)

Essas funções são usadas dentro do código c para a saída do usuário para executar qualquer uma das chamadas de funções fornecidas na seção Códigos de Função. Com a combinação das diferentes chamadas function_code, você pode executar muitas tarefas usando ERCALLBACK, como:

Por exemplo, se você precisar de uma mensagem gravada no arquivo de relatório sempre que a defasagem na tabela de integridade exceder um determinado limite, poderá usar a função CUSEREXIT. A função CUSEREXIT faria várias chamadas para ERCALLBACK para obter os dados da coluna de defasagem, executar cálculos e a comparação e, se o defasagem estiver acima do limite especificado, gravará uma mensagem no arquivo de relatório.