3.18 GETVAL
@GETVAL
ファンクションでは、ストアド・プロシージャまたは問合せから値を抽出し、MAP
またはTABLE
文のFILTER
またはCOLMAP
句の入力として使用できるようにします。
@GETVAL
を使用してパラメータ値を抽出できるかどうかは、次のことに依存します。
-
ストアド・プロシージャまたは問合せの実行の成否。
-
ストアド・プロシージャまたは問合せの結果の失効の有無。
値を抽出できない場合、@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);
親トピック: 列変換ファンクション