• ベストアンサー

ストアドプロシージャ呼び出しのSQL文について

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

質問者が選んだベストアンサー

  • ベストアンサー
  • ct27
  • ベストアンサー率62% (48/77)
回答No.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を取得することができます。 うーん、わかりにくい!!(^^; わかりにくかったらまた根ほり葉ほり聞いて下さい。(笑)

appipi
質問者

お礼

返事が大変に遅れて申し訳ありません。 仕事に追われるうちに今日に至ってしまいました。。。 2度に渡ってのご親切な回答ありがとうございます。 お蔭様で、なんとかなりました! いやいや、本当に助かりました。 今回も根掘り葉掘り聞こうと思ったのですが、 是非次回にでもと思います。(すいません、調子に乗りすぎました。。。) それでは、本当にありがとうございました。 敬具

その他の回答 (1)

  • ct27
  • ベストアンサー率62% (48/77)
回答No.1

引数の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)」でとりだせるようです。

appipi
質問者

お礼

どうもありがとうございます。 言い方が悪くてすいませんでした。。。 >CallableStatement para = con.prepareCall("{call SP030(?,?,?)}"); ↑の「"{call SP030(?,?,?)}"」部分が知りたかったんです。 「SP030」はプロシージャのファイル名でいいんですか? あと、3つの「?」のところにそれぞれ何が入るのでしょうか? 多分、テーブル名と、カラム名と、データをセットするのでしょうか? もし、その場合には、「(1,2,3)」としたら順番はどうなるんでしょうか? せっかく、教えていただいてまた根掘り葉掘り聞いてしまって 申し訳ありませんが、時間があるときにでも教えてください。 よろしくお願いします。

関連するQ&A

専門家に質問してみよう