パラメータを使用するSQLEXECの例
これらの例では、入力パラメータと出力パラメータを使用するストアド・プロシージャと問合せを使用します。
ノート:
プロシージャまたは問合せにパラメータが含まれる場合、追加のSQLEXEC
オプションを使用できます。Oracle GoldenGateパラメータおよび機能リファレンスのSQLEXEC
を参照してください。
例11-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
列にマップできます。
例11-4 問合せを使用する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));