Uso de ERCALLBACK
ERCALLBACK es la función de salida de usuario básica para Oracle GoldenGate. Se utiliza para extraer el contexto de registro a la salida de usuario. Es como un paquete que contiene varias funciones individuales dentro de él. Puede llamar a estas funciones y obtener valores de retorno. Por ejemplo, se pueden llamar a funciones como GET_BEFORE_AFTER_IND o GET_COLUMN_VALUE_FROM_NAME. Estas funciones se denominan function_code.
Sintaxis
ERCALLBACK (<function_code>, <buffer>, <result_code> );
<function_code>
Función que debe ejecutar la rutina de devolución de llamada. La rutina de devolución de llamada del usuario se comporta de manera diferente según el código de función transferido a la rutina de devolución de llamada. Mientras que algunas funciones se pueden utilizar tanto para Extract como para Replicat, la validez de la función en un proceso u otro depende de los parámetros de entrada que se definen para esa función durante la rutina de devolución de llamada. Consulte Códigos de función para obtener una descripción completa de los códigos de función disponibles.
<buffer>
Un puntero nulo a un buffer que contiene una estructura predefinida asociada con el código de función especificado.
<result_code>
Estado de la función ejecutada por la rutina de devolución de llamada. El código de resultado devuelto por la rutina de devolución de llamada indica si la función de devolución de llamada se realizó correctamente o no. Un código de resultado puede ser uno de los valores de la Tabla 4-4.
Tabla 4 Códigos de resultado
| Código | Descripción |
|---|---|
EXIT_FN_RET_BAD_COLUMN_DATA |
Se han encontrado datos no válidos al recuperar o definir datos de columna. |
EXIT_FN_RET_BAD_DATE_TIME |
Una columna de fecha, registro de hora o tipo de intervalo of contiene un valor de fecha o hora no válido. |
EXIT_FN_RET_BAD_NUMERIC_VALUE |
Un tipo numérico de columna contiene un valor numérico no válido. |
EXIT_FN_RET_COLUMN_NOT_FOUND |
No se ha encontrado la columna en un registro de actualización comprimido (actualización por una base de datos que solo registra los valores que se han cambiado). |
EXIT_FN_RET_ENV_NOT_FOUND |
No se ha encontrado el valor de entorno especificado en el registro. |
EXIT_FN_RET_EXCEEDED_MAX_LENGTH |
No se han podido recuperar los metadatos porque el nombre de la tabla o columna no cabía en el buffer asignado. |
EXIT_FN_RET_FETCH_ERROR |
No se pudo recuperar el registro. Consulte el mensaje de error para ver el motivo. |
EXIT_FN_RET_INCOMPLETE_DDL_REC |
Se ha producido un error interno al procesar el registro DDL. Es probable que el registro esté incompleto. |
EXIT_FN_RET_INVALID_CALLBACK_FNC_CD |
Se transfirió un código de función de devolución de llamada no válido a la rutina de devolución de llamada. |
EXIT_FN_RET_INVALID_COLUMN |
Se hizo referencia a una columna inexistente en la llamada de función. |
EXIT_FN_RET_INVALID_COLUMN_TYPE |
La rutina está intentando manipular un tipo de dato que no está soportado por Oracle GoldenGate para ese fin. |
EXIT_FN_RET_INVALID_CONTEXT |
La función de devolución de llamada se llamó en un momento incorrecto. |
EXIT_FN_RET_INVALID_PARAM |
Se ha pasado un parámetro no válido a la función de devolución de llamada. |
EXIT_FN_RET_NO_SRCDB_INSTANCE |
No se ha encontrado la instancia de la base de datos origen. |
EXIT_FN_RET_NO_TGTDB_INSTANCE |
No se ha encontrado la instancia de la base de datos destino. |
EXIT_FN_RET_NOT_SUPPORTED |
Esta función no se admite para este proceso. |
EXIT_FN_RET_OK |
La función de devolución de llamada se ha realizado correctamente. |
EXIT_FN_RET_SESSION_CS_CNV_ERR |
Se ha devuelto un error ULIB_ERR_INVALID_CHAR_FOUND a la rutina de conversión del juego de caracteres. La conversión ha fallado. |
EXIT_FN_RET_TABLE_NOT_FOUND |
Se ha especificado un nombre de tabla no válido. |
EXIT_FN_RET_TOKEN_NOT_FOUND |
No se ha encontrado el token de usuario especificado en el registro. |
Puede utilizar ERCALLBACK para realizar muchas llamadas de función diferentes. Por ejemplo, si desea obtener el nombre de una tabla, puede utilizar el siguiente comando:
ERCALLBACK (GET_TABLE_NAME, &var, &result_code)
Estas funciones se utilizan dentro del código c para que la salida de usuario realice cualquiera de las llamadas para las funciones proporcionadas en la sección Códigos de función. Con la combinación de las diferentes llamadas function_code, puede realizar muchas tareas mediante ERCALLBACK, como:
-
Volver a crear sentencias
DML -
Realizar transformaciones
-
Extraer columnas específicas de un registro
-
Escribir información en un archivo de informe
Por ejemplo, si necesita que se escriba un mensaje en el archivo de informe cada vez que la demora en la tabla de latidos supere un determinado umbral, puede utilizar la función CUSEREXIT. La función CUSEREXIT realizará numerosas llamadas a ERCALLBACK para obtener los datos de la columna de demora, realizar cálculos y la comparación, y si la demora supera el umbral especificado, escriba un mensaje en el archivo de informe.