Esempi di SQLEXEC con parametri

Questi esempi utilizzano procedure memorizzate e query con parametri di input e output.

Nota: sono disponibili opzioni SQLEXEC aggiuntive da utilizzare quando una procedura o una query include parametri. Consulta SQLEXEC in Riferimento su parametri e funzioni per Oracle GoldenGate.

Esempio 9-3 SQLEXEC con procedura memorizzata

In questo esempio viene utilizzato SQLEXEC per eseguire una stored procedure denominata LOOKUP che esegue una query per restituire una descrizione basata su un codice. Quindi mappa i risultati a una colonna di destinazione denominata NEWACCT_VAL.

CREATE OR REPLACE PROCEDURE LOOKUP
(CODE_PARAM IN VARCHAR2, DESC_PARAM OUT VARCHAR2)
BEGIN
    SELECT DESC_COL
    INTO DESC_PARAM
    FROM LOOKUP_TABLE
    WHERE CODE_COL = CODE_PARAM
END;

Contenuto dell'istruzione MAP:

MAP sales.account, TARGET sales.newacct, &
  SQLEXEC (SPNAME lookup, PARAMS (code_param = account_code)), &
    COLMAP (newacct_id = account_id, newacct_val = lookup.desc_param);

SQLEXEC esegue la stored procedure LOOKUP. All'interno della clausola SQLEXEC, l'istruzione PARAMS (code_param = account_code) identifica code_param come parametro della procedura per accettare l'input dalla colonna account_code nella tabella account.

Replicat esegue la stored procedure LOOKUP prima di eseguire la mappa delle colonne, in modo che la clausola COLMAP possa estrarre e mappare i risultati alla colonna newacct_val.

Esempio 9-4 SQLEXEC con una query

Questo esempio implementa la stessa logica utilizzata nell'esempio precedente, ma esegue una query SQL anziché una stored procedure e utilizza la funzione @GETVAL nella mappa delle colonne.

Una query deve trovarsi su una riga. Per suddividere un'istruzione dei parametri Oracle GoldenGate in più righe, è necessario un terminatore di riga E commerciale (&).

Query per un Oracle AI Database:

MAP sales.account, TARGET sales.newacct, &
SQLEXEC (ID lookup, &
QUERY 'select desc_col desc_param from lookup_table where code_col = :code_param', &
PARAMS (code_param = account_code)), &
COLMAP (newacct_id = account_id, newacct_val = &
@getval (lookup.desc_param));

Query per un database non Oracle AI Database:

MAP sales.account, TARGET sales.newacct, &
SQLEXEC (ID lookup, &
QUERY 'select desc_col desc_param from lookup_table where code_col = ?', &
PARAMS (p1 = account_code)), &
COLMAP (newacct_id = account_id, newacct_val = &
@getval (lookup.desc_param));