使用参数的 SQLEXEC 示例

这些示例使用存储过程和查询以及输入和输出参数。

注:当过程或查询包含参数时,可以使用其他 SQLEXEC 选项。请参阅《 Parameters and Functions Reference for Oracle GoldenGate 》中的 SQLEXEC 。

具有存储过程的示例 9-3 SQLEXEC

此示例使用 SQLEXEC 运行名为 LOOKUP 的存储过程,该过程执行查询以基于代码返回说明。然后,它将结果映射到名为 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;

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 执行 LOOKUP 存储过程。在 SQLEXEC 子句中,PARAMS (code_param = account_code) 语句将 code_param 标识为接受 account 表中 account_code 列输入的过程参数。

Replicat 在执行列映射之前执行 LOOKUP 存储过程,以便 COLMAP 子句可以提取结果并将结果映射到 newacct_val 列。

带有查询的 9-4 SQLEXEC 示例

此示例实施的逻辑与上一示例中使用的逻辑相同,但它执行 SQL 查询而不是存储过程,并在列映射中使用 @GETVAL 函数。

查询必须位于一行中。要将 Oracle GoldenGate 参数语句拆分为多行,需要使用 & 符号 (&) 行终止符。

查询 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));

查询非 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));