- PR -

ストアドプロシージャのINパラメータの取得

1
投稿者投稿内容
Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2007-08-17 17:54
お世話になります。
どなたかわかる方がいらっしゃいましたらご意見をお願いします。

下記のような方法でストアドプロシージャを実行しようとしていますが、
INパラメータにセットした値を再取得することは出来るでしょうか?


※ソースは大雑把ですが…
-------------------------------------------------------------------

Connection con = DBUtil.getDBConnection();
 CallableStatement stmt = con.prepareCall
              ("{call TEST_PRC(?,?,? ) }");

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

 stmt.setString(1, "ABC");
 stmt.setString(2, "555");
 stmt.registerOutParameter(3, Types.VARCHAR);
 stmt.execute();

 System.out.println("IN1の確認:" + stmt.getString(1)); // ×エラーになる
 System.out.println("IN2の確認:" + stmt.getString(2)); // ×エラーになる
 System.out.println("OUTの確認:" + stmt.getString(3)); // ○値が取得出来る

-------------------------------------------------------------------

ストアドプロシージャ自体は正しくCALL出来ているのですが、
INパラメータの再取得を行うとSQLException(列索引が無効です)が発生します。
他にも色々試したのですが、INパラメータを取得出来るようなメソッドが
見つかりませんでした。

上記のコードに変更を加えることは許されていないのですが、
その前提で、セット済みのINパラメータを再取得することは可能でしょうか?

ご意見よろしくお願いいたします。

Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2007-08-17 18:09
すみません書き忘れました!
環境ですが、

 Javaのversion:1.4.2_13
 DB:Oracle10g

です。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-08-17 18:28
InはInだけにOutできないはずですね。
Outでもない情報がDBから流れてくるのはそれはそれで気持ち悪い。
必要なら呼び出し元で覚えておくべきでは?
Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2007-08-17 19:17
>nagiseさん
返答ありがとうございます。
やっぱり出来ないのでしょうか!?


ちなみに、主目的はデータの取得ではなく、単体テストでの確認なんです…

呼び出し先のプロシージャは別途単体テスト済みなので、
自分の持ち分としてパラメータを正しく渡していることを
確認出来ればそこまででOKということにしたのです。
(※プロシージャの処理内容が複雑で、OUTPUTからの判定が難しい為の逃げ措置ですが)

セット前のパラメータを出力してみても、セットにミスがあったら
テストの意味がないし、ダミープロシージャを作成して
ダミーテーブルに引数を書き出す…とかやるとどんどん正確性が
危うくなるので、タイミングとしてはセット後のここだと思ったんです。


どうにかして取得出来ないでしょうか…。
SQLを編集して実行するときのように、実際に流れる内容を出せたりとかでも
十分なんですが…
1

スキルアップ/キャリアアップ(JOB@IT)