CallHandlerWithParameters<CAL> インターフェース

SQL ストアード・プロシージャー呼び出しからの結果を pureQuery が処理する方法をカスタマイズするには、com.ibm.pdq.runtime.handlers.CallHandlerWithParameters<CAL> インターフェースのインプリメンテーションを使用します。pureQuery は、そのインプリメンテーションを使用して、CALL ステートメントを実行したアノテーション付きメソッドまたはインライン・メソッドから戻すオブジェクトを作成できます。また、このインプリメンテーションは、OUT パラメーターと INOUT パラメーターの更新など必要な任意の追加的処理を実行できます。

SQL ストアード・プロシージャー呼び出しがあった場合、pureQuery は、デフォルトで StoredProcedureResult のインスタンスとして結果を戻します。 また、デフォルトの場合、pureQuery は、アノテーション付きメソッドまたはインライン・メソッドに渡されたマップと Bean を、OUT パラメーターと INOUT パラメーターが示されるように更新します。

CallHandlerWithParameters<T> インターフェースにあるメソッドは、以下の 1 つだけです。
T handleCall (CallableStatement cstmt, Object... parameters) throws SQLException

pureQuery は handleCall() メソッドを呼び出し、アノテーション付きメソッドまたはインライン・メソッドから戻されるオブジェクトを作成します。pureQuery は、このメソッドを呼び出すときに、java.sql.CallableStatement インターフェースを実装するオブジェクトを渡します。このインターフェースは、SQL CALL ステートメントを実行するのに使用されたものです。また pureQuery は、CALL ステートメントでパラメーター値を渡すときに使用したパラメーターも渡します。

CallHandlerWithParameters<CAL> のインプリメンテーションを作成する場合は、ストアード・プロシージャー呼び出しの結果を示す <CAL> 型のオブジェクトを作成して戻すこのメソッドを実装してください。handleCall() メソッド内で実行すると良いと思われるいくつかのアクティビティーを次に示します。
  • cstmt を使用して、ストアード・プロシージャーから戻されるすべての ResultSet オブジェクトにアクセスし、場合によっては、このメソッドから返される <CAL> 型のオブジェクトに結果の一部またはすべてを格納する。java.sql.CallableStatement インターフェースについては、ご使用の Java™ SDK の Javadoc™ を参照してください。
  • cstmt を使用して、ストアード・プロシージャーの OUT パラメーターと INOUT パラメーターが戻す値にアクセスし、結果として生成される <CAL> オブジェクトにそれらの値を格納する。
  • cstmt を使用して、ストアード・プロシージャーが戻す OUT パラメーターと INOUT パラメーターの値にアクセスし、アノテーション付きメソッドまたはインライン・メソッドに渡されたパラメーターを新しい値に更新する。

アノテーション付きメソッドを用いた CallHandlerWithParameters<CAL> オブジェクトの使用

アノテーション付きメソッドから CallHandlerWithParameter オブジェクトを呼び出すには、次の 2 つの方法があります。

インライン・メソッドを用いた CallHandlerWithParameters<CAL> オブジェクトの使用

Data インターフェースの以下のバージョンの多重定義された call() メソッドに対して、CallHandlerWithParameters<CAL> オブジェクトを渡します。

<CAL> T call(String sql, CallHandlerWithParameters<CAL> callHandlerWithParameters, Object... parameters)

以下は一例です。

MyResultsBean spResults = db.call("{?1 = Call ADDEM (?1.added1, ?1.addend2, ?1.sum)}",
		new custom.GetAddEmResult_CallHandlerWithParameters(), int outVal, int inVal1, int inVal2, int inVal3)

フィードバック