パラメータを使用するSQLEXECの例
これらの例では、入力パラメータと出力パラメータを使用するストアド・プロシージャと問合せを使用します。
ノート:
プロシージャまたは問合せにパラメータが含まれる場合、追加のSQLEXECオプションを使用できます。SQLEXECの詳細は、『Oracle GoldenGateリファレンス』を参照してください。
例8-27 ストアド・プロシージャを使用する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列にマップできます。
例8-28 問合せを使用するSQLEXEC
この例では、前述の例で使用されているものと同じロジックを実装していますが、ストアド・プロシージャのかわりにSQL問合せを実行し、列マップで@GETVAL関数を使用します。
問合せは1行である必要があります。また、Oracle GoldenGateのパラメータ文を複数の行に分割する場合、行末にアンパサンド(&)が必要です。
Oracleデータベースの問合せ:
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以外のデータベースの問合せ:
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));