こんにちは!

現在、EJBからDBサーバー内のストアドプロシージャを呼び出して
実行させたいのですが、「Connection」の「prepareCall」を
使用する場合にその引数のSQLをどうやって書けばいいのか
わからないで困っています。
一応、登録・更新のSQLなので、データを含んだ形になるのですが、
どなたかご存知の方いらっしゃいましたらご指導ください。

よろしくお願いします。

A 回答 (2件)

先の回答が的を得ていたようで良かったです。

(^^)
お察しの通りここでの「SP030」はストアドの名称です。このストアドの引数はSP030( in, in, out )とお考え下さい。

con.prepareCall("{call SP030(?,?,?)}");

の?はバインド変数の意味です。なのでコード自体は?のまま記述します。
その下の
para.setString( 1, "0" );
で一番最初の?に入れるものを指定します。一番目なので引数に「1」と書いてあります。次の引数の「"0"」は?に入る値です。
なのでそこが変数でも関数の戻り値でも良いわけです。
そしてそして次の行の
para.setString( 2, "0" );
は二番目の?に「"0"」を入れますと言う意味です。
その次の行
para.registerOutParameter( 3, java.sql.Types.CHAR );
は三番目の?はストアドのパラメータがoutなのでストアドからもらえる値です。
「java.sql.Types.CHAR」はもらえる値がchar型ですよ、と示しているわけです。
そして最後に
para.execute();
でストアドが実行されます。

outの値を取得する場合は実行した後に
Sting val1 = para.getString(3);
と記述すると、変数val1にoutを取得することができます。

うーん、わかりにくい!!(^^;
わかりにくかったらまた根ほり葉ほり聞いて下さい。(笑)
    • good
    • 0
この回答へのお礼

返事が大変に遅れて申し訳ありません。
仕事に追われるうちに今日に至ってしまいました。。。

2度に渡ってのご親切な回答ありがとうございます。
お蔭様で、なんとかなりました!

いやいや、本当に助かりました。
今回も根掘り葉掘り聞こうと思ったのですが、
是非次回にでもと思います。(すいません、調子に乗りすぎました。。。)

それでは、本当にありがとうございました。

敬具

お礼日時:2001/02/22 22:54

引数のSQLという表現がよくわからなかったのですが、ただ単にストアドの引数をどうやってかけばいいのか


ということでよいのでしょうか?(ちなみにJDK1.3使用)

Connection con~中略~
CallableStatement para = con.prepareCall("{call SP030(?,?,?)}");
para.setString( 1, "0" );
para.setString( 2, "0" );
para.registerOutParameter( 3, java.sql.Types.CHAR );
para.execute();

EJBのことはよくわかりませんが、上記のようにinはsetStringを使用して
outはregisterOutParameterを使用すればいいようです。
的が大外れしていたらすみません。<(_ _)>
ちなみにoutは上記であれば「para.getString(3)」でとりだせるようです。
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
言い方が悪くてすいませんでした。。。

>CallableStatement para = con.prepareCall("{call SP030(?,?,?)}");

↑の「"{call SP030(?,?,?)}"」部分が知りたかったんです。


「SP030」はプロシージャのファイル名でいいんですか?
あと、3つの「?」のところにそれぞれ何が入るのでしょうか?
多分、テーブル名と、カラム名と、データをセットするのでしょうか?
もし、その場合には、「(1,2,3)」としたら順番はどうなるんでしょうか?

せっかく、教えていただいてまた根掘り葉掘り聞いてしまって
申し訳ありませんが、時間があるときにでも教えてください。
よろしくお願いします。

お礼日時:2001/02/16 18:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ