Utilizzo di ERCALLBACK
ERCALLBACK è la funzione di user exit di base per Oracle GoldenGate. Viene utilizzato per estrarre il contesto del record nell'uscita utente. È come un pacchetto che contiene più funzioni individuali al suo interno. È possibile richiamare queste funzioni e ottenere i valori restituiti. Ad esempio, è possibile chiamare funzioni come GET_BEFORE_AFTER_IND o GET_COLUMN_VALUE_FROM_NAME. Queste funzioni sono denominate function_code.
Sintassi
ERCALLBACK (<function_code>, <buffer>, <result_code> );
<function_code>
Funzione che deve essere eseguita dalla routine di callback. La routine di callback dell'utente si comporta in modo diverso in base al codice funzione passato alla routine di callback. Mentre alcune funzioni possono essere utilizzate sia per Extract che per Replicat, la validità della funzione in un processo o nell'altro dipende dai parametri di input impostati per tale funzione durante la routine di callback. Per una descrizione completa dei codici funzione disponibili, vedere Codici funzione.
<buffer>
Puntatore vuoto a un buffer contenente una struttura predefinita associata al codice funzione specificato.
<result_code>
Stato della funzione eseguita dalla routine di callback. Il codice risultato restituito dalla routine di callback indica se la funzione di callback è riuscita o meno. Un codice risultato può essere uno dei valori della Tabella 4-4.
Tabella 4 Codici risultato
| Codice | Descrizione |
|---|---|
EXIT_FN_RET_BAD_COLUMN_DATA |
Sono stati rilevati dati non validi durante il recupero o l'impostazione dei dati della colonna. |
EXIT_FN_RET_BAD_DATE_TIME |
Una colonna of di tipo data, ora o intervallo contiene un valore di data o ora non valido. |
EXIT_FN_RET_BAD_NUMERIC_VALUE |
Un tipo numerico di colonna contiene un valore numerico non valido. |
EXIT_FN_RET_COLUMN_NOT_FOUND |
Colonna non trovata in un record di aggiornamento compresso (aggiornamento eseguito da un database che registra solo i valori modificati). |
EXIT_FN_RET_ENV_NOT_FOUND |
Impossibile trovare il valore di ambiente specificato nel record. |
EXIT_FN_RET_EXCEEDED_MAX_LENGTH |
Impossibile recuperare i metadati perché il nome della tabella o della colonna non rientra nel buffer allocato. |
EXIT_FN_RET_FETCH_ERROR |
Impossibile recuperare il record. Visualizzare il messaggio di errore per visualizzare il motivo. |
EXIT_FN_RET_INCOMPLETE_DDL_REC |
Si è verificato un errore interno durante l'elaborazione del record DDL. Il record è probabilmente incompleto. |
EXIT_FN_RET_INVALID_CALLBACK_FNC_CD |
Alla routine di callback è stato passato un codice funzione di callback non valido. |
EXIT_FN_RET_INVALID_COLUMN |
Nella chiamata alla funzione è stata indicata una colonna inesistente. |
EXIT_FN_RET_INVALID_COLUMN_TYPE |
La routine sta tentando di manipolare un tipo di dati non supportato da Oracle GoldenGate a tale scopo. |
EXIT_FN_RET_INVALID_CONTEXT |
La funzione di callback è stata richiamata in un momento non corretto. |
EXIT_FN_RET_INVALID_PARAM |
Un parametro non valido è stato passato alla funzione di callback. |
EXIT_FN_RET_NO_SRCDB_INSTANCE |
Impossibile trovare l'istanza del database di origine. |
EXIT_FN_RET_NO_TGTDB_INSTANCE |
Impossibile trovare l'istanza di database di destinazione. |
EXIT_FN_RET_NOT_SUPPORTED |
Questa funzione non è supportata per questo processo. |
EXIT_FN_RET_OK |
Funzione di callback riuscita. |
EXIT_FN_RET_SESSION_CS_CNV_ERR |
È stato restituito un errore ULIB_ERR_INVALID_CHAR_FOUND alla routine di conversione del set di caratteri. Conversione non riuscita. |
EXIT_FN_RET_TABLE_NOT_FOUND |
È stato specificato un nome tabella non valido. |
EXIT_FN_RET_TOKEN_NOT_FOUND |
Impossibile trovare il token utente specificato nel record. |
È possibile utilizzare ERCALLBACK per eseguire molte chiamate di funzione diverse. Ad esempio, se si desidera ottenere il nome di una tabella, è possibile utilizzare il comando seguente:
ERCALLBACK (GET_TABLE_NAME, &var, &result_code)
Queste funzioni vengono utilizzate all'interno del codice c per l'uscita utente per eseguire le chiamate per le funzioni fornite nella sezione Codici funzione. Con la combinazione delle diverse chiamate function_code, è possibile eseguire molte attività utilizzando ERCALLBACK, ad esempio:
-
Ricreare le istruzioni
DML -
Esegui trasformazioni
-
Estrarre colonne specifiche da un record
-
Scrivere informazioni in un file di report
Ad esempio, se è necessario scrivere un messaggio nel file di report ogni volta che il ritardo nella tabella di heartbeat supera una determinata soglia, è possibile utilizzare la funzione CUSEREXIT. La funzione CUSEREXIT effettuerà quindi numerose chiamate a ERCALLBACK per ottenere i dati della colonna di ritardo, eseguire i calcoli e il confronto e, se il ritardo supera la soglia specificata, scrivere un messaggio nel file di report.