Exemplos de SQLEXEC Usando Parâmetros
Esses exemplos usam procedimentos armazenados e consultas com parâmetros de entrada e saída.
Observação: opções adicionais SQLEXEC estão disponíveis para uso quando um procedimento ou consulta inclui parâmetros. Consulte SQLEXEC na Referência de Parâmetros e Funções do Oracle GoldenGate.
Exemplo 9-3 SQLEXEC com um Procedimento Armazenado
Este exemplo usa SQLEXEC para executar um procedimento armazenado chamado LOOKUP que executa uma consulta para retornar uma descrição com base em um código. Em seguida, ele mapeia os resultados para uma coluna de destino chamada 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;
Conteúdo da instrução 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 executa o procedimento armazenado LOOKUP. Na cláusula SQLEXEC, a instrução PARAMS (code_param = account_code) identifica code_param como o parâmetro de procedimento a ser aceito na coluna account_code da tabela account.
O Replicat executa o procedimento armazenado LOOKUP antes de executar o mapa de colunas, para que a cláusula COLMAP possa extrair e mapear os resultados para a coluna newacct_val.
Exemplo 9-4 SQLEXEC com uma Consulta
Este exemplo implementa a mesma lógica usada no exemplo anterior, mas executa uma consulta SQL em vez de um procedimento armazenado e usa a função @GETVAL no mapa de colunas.
Uma consulta deve estar em uma linha. Para dividir uma instrução de parâmetro do Oracle GoldenGate em várias linhas, é necessário um terminador de linha E comercial (&).
Consulta para um 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));
Consulta para um não 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));