-PR-
解決済み

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

  • 困ってます
  • 質問No.40744
  • 閲覧数961
  • ありがとう数5
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 100% (13/13)

こんにちは!

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

よろしくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル9

ベストアンサー率 62% (48/77)

先の回答が的を得ていたようで良かったです。(^^)
お察しの通りここでの「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

お礼率 100% (13/13)

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

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

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

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

敬具
投稿日時 - 2001-02-22 22:54:54
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル9

ベストアンサー率 62% (48/77)

引数の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

お礼率 100% (13/13)

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

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

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


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

せっかく、教えていただいてまた根掘り葉掘り聞いてしまって
申し訳ありませんが、時間があるときにでも教えてください。
よろしくお願いします。
投稿日時 - 2001-02-16 18:42:53


このQ&Aのテーマ
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ