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); 
親トピック: 列変換ファンクション