主コンテンツへ
Oracle® Fusion Middleware Oracle GoldenGateリファレンスfor Windows and UNIX
12c (12.2.0.1)
E70112-04
目次へ移動
目次

前
次

5.17 GETVAL

@GETVALファンクションでは、ストアド・プロシージャまたは問合せから値を抽出し、MAPまたはTABLE文のFILTERまたはCOLMAP句の入力として使用できるようにします。

@GETVALを使用してパラメータ値を抽出できるかどうかは、次のことに依存します。

  1. ストアド・プロシージャまたは問合せの実行の成否。

  2. ストアド・プロシージャまたは問合せの結果の失効の有無。

値を抽出できない場合、@GETVALファンクションの結果は"紛失した列"になります。一般的にこのような状態は、データベースが変更されたログのみを記録する場合に更新操作で発生します。

通常、これは列をマッピングできないことを意味します。紛失した列値をテストするには、@COLTESTファンクションを使用して@GETVALの結果をテストした後、必要な場合には、紛失した値を補うために、列に代替値をマップします。または、列値を使用可能にするために、TABLEまたはMAPパラメータのFETCHCOLSまたはFETCHCOLSEXCEPTオプションを使用して、値がログに存在しない場合にデータベースから値をフェッチさせます。必要な列のサプリメンタル・ロギングを有効にする方法も有益です。

構文

@GETVAL (name.parameter)
name

ストアド・プロシージャまたは問合せ名。SQLEXECを使用してプロシージャまたは問合せを使用するときは、次の値が有効です。

問合せでは、SQLEXEC句のIDオプションで指定されている論理名を使用します。IDは、問合せで必須のSQLEXEC引数です。

ストアド・プロシージャでは、TABLEまたはMAP文内でプロシージャを実行する回数に応じて、次のいずれかを使用します。

  • 複数回実行するときは、SQLEXEC文のID句で定義されている論理名を使用します。IDは、1つのプロシージャを複数回実行するときに必須です。

  • 1回実行するときは、ストアド・プロシージャの実際の名前を使用します。

parameter

有効な値は、次のいずれかです。

  • データを抽出し、列マップに渡すストアド・プロシージャまたは問合せ内のパラメータ名。

  • ストアド・プロシージャまたは問合せが返す値を抽出するときは、RETURN_VALUE

代替構文

SQLEXECでは、@GETVALキーワードを明示的に使用せずにパラメータ結果を取得できます。次の形式で、プロシージャ名(問合せまたはプロシージャの複数のインスタンスを使用する場合は論理名)およびパラメータを参照します。

{procedure_name | logical_name}.parameter

例(標準構文)

例1   

次の例では、各MAP文が@GETVALファンクション内で論理名lookup1およびlookup2を参照することによって、ストアド・プロシージャlookupをコールし、各結果セットを適切に参照できるようにします。

MAP schema.srctab, TARGET schema.targtab,
SQLEXEC (SPNAME lookup, ID lookup1, PARAMS (param1 = srccol)),
COLMAP (targcol1 = @GETVAL (lookup1.param2));
MAP schema.srctab, TARGET schema.targtab2,
SQLEXEC (SPNAME lookup, ID lookup2, PARAMS (param1 = srccol)),
COLMAP (targcol2= @GETVAL (lookup2.param2));
例2   

次の例では、ストアド・プロシージャlookupを1回実行します。このケースでは、実際のプロシージャ名を使用します。論理名は必要ありません。

MAP schema.tab1, TARGET schema.tab2,
SQLEXEC (SPNAME lookup, PARAMS (param1 = srccol)),
COLMAP (targcol = @GETVAL (lookup.param1));
例3   

次の例では、問合せを実行し、取得した値を@GETVALを使用してマップします。

MAP sales.account, TARGET sales.newacct,
SQLEXEC (ID lookup,
QUERY ' select desc_col into 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));

例(代替構文)

例1   

次の例では、@GETVALキーワードを使用せずに、@GETVALが暗黙的にproc1.p2で呼び出されます。

MAP test.tab1, TARGET test.tab2,
SQLEXEC (SPNAME proc1, ID myproc, PARAMS (p1 = sourcecol1)),
COLMAP (targcol1 = proc1.p2);
例2   

次の例では、@GETVALキーワードを使用せずに、@GETVALファンクションが暗黙的にlookup.desc_paramで呼び出されます。

MAP sales.account, TARGET sales.newacct,
SQLEXEC (ID lookup,
QUERY ' select desc_col into desc_param from lookup_table '
' where code_col = :code_param ',
PARAMS (code_param = account_code)),
COLMAP (newacct_id = account_id, newacct_val = lookup.desc_param);