使用参数的 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));