- - PR -
Javaからすストアドプロシージャ(DB2)の実行
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-07-08 20:25
おつかれさまです。
JavaからDB2にアクセスして、@〜Bの処理を実行して、 ストアドプロシージャを実行することを検討しています。 ストアドプロシージャを実行する場合に、ResultSetを返す場合が あるようなのですが、どのような場合にResultSetが帰ってくるのでしょうか。 以下のストアドプロシージャではResultSetは帰ってきませんでした。 @Connectionを取得 AConnectionからCallableStatementのインスタンスを生成 BCallableStatementでストアドプロシージャの実行(executeQuery or executeUpdateメソッド) ストアドプロシージャ CREATE PROCEDURE TESTPRO (IN param1 decimal(10,0), OUT param2 decimal (10,0), OUT param3 decimal (10,0)) LANGUAGE SQL BEGIN set param2 = param1 * 2; set param3 = (SELECT COLUMN1 FROM TABLEA WHERE TEXT1 = 'XXXX'); END |
|
投稿日時: 2005-07-08 20:41
DB2のストアドは詳しくないので一般的な話ですが、
ちなみに欲しいのはアウトのパラメータでしょうか? SQL自体レコードを返すようにはなっていないように見えましたので。 アウトのパラメータはResultSetには入りません。 (ここら辺って、JDBCドライバの実装次第で変わるかもしれませんが・・・) アウトのパラメータはCallableStatement#registerOutParameterで登録し、 実行を行うとgetXXXで取得できたと思います。 |
|
投稿日時: 2005-07-09 23:06
かつのりさんご返答ありがとうございます。
registerOutParameterで、Outputはを設定し、プロシージャーの実行後に、CallableStatement#getXXXメソッドでOUTのパラメータは取得できています。 その後、調査していたのですが、プロシージャが以下のように結果セット を返すような場合にResutSetが取得できるようです。 *以下はOracleのストアドプロシージャですが・・・ PROCEDURE test(rcset OUT refcur, vUserId IN tt.user_name%type, vAa IN tt.aa%type, vFromDate IN VARCHAR2, vToDate IN VARCHAR2) IS /*parameters*/ TYPE refcur IS REF CURSOR; vDateFormat VARCHAR2(20); BEGIN /*initialize*/ vDateFormat := '''YYYY/MM/DD'''; /*make sql statement*/ s_Sql := 'SELECT id FROM tt'; s_Sql := s_Sql || ' WHERE user_name = :vUserId'; s_Sql := s_Sql || ' AND aa = :vAa'; s_Sql := s_Sql || ' AND action_dt >= to_date(:vFromDate,'; s_Sql := s_Sql || vDateFormat; s_Sql := s_Sql || ')'; s_Sql := s_Sql || ' AND action_dt < (1 + to_date(:vToDate,'; s_Sql := s_Sql || vDateFormat; s_Sql := s_Sql || '))'; s_Sql := s_Sql || ' ORDER BY action_dt'; /*set cursor*/ OPEN rcset FOR s_Sql using vUserId, vAa; END test; |
|
投稿日時: 2005-07-09 23:21
PL/SQLも詳しくないので良く知りませんが、
JDBCに関係なく、レコードが返されるクエリはResultSetで取得でき、 レコードが返されないものはResultSetでは返ってこないものと考えるべきでしょう。 しかしストアドの実行結果の処理は、あくまでJDBCドライバの実装次第です。 ドライバの実装次第ではカーソル変数取得用のクエリだけでもResultSetが返ってきたり、 SELECT文を実行してもResultSetが返らない実装もあり得ます。 折角商用のDBを使用しているのですから、仕様等での不明点は、 使用しているDBのベンダに問い合わせてみてはいかがでしょうか。 |
1