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:
-
Recriar instruções
DML -
Executar transformações
-
Retirar colunas específicas de um registro
-
Gravar informações em um arquivo de relatório
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.