• ベストアンサー

JDBCによるストアドCALL

今日はJDBCによるストアードプロシージャCALLについてお伺いします。 ストアードプロシージャのCALL文では以下のように宣言しますが、{}は必要なのでしょうか? con.prepareCall("CALL KRVZZ01Z(?,?)")  ・・・・(1) con.prepareCall("{CALL KRVZZ01Z(?,?)}") ・・・(2) どの本にも(2)のように記述してあるのですが、私の環境では(1)でも動きました。 いらないのでしょうか? 環境はDB2とJDK1.3です。 よろしくお願いいたします。

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

  • ベストアンサー
  • hidebu-
  • ベストアンサー率53% (45/84)
回答No.1

基本的につけておくことを進めます。 {}はネイティブSQLであることを示すものだからです。 おそらくCallをつかっているとみるとPL/SQLだとおもわれますが、ストアドプロシジャは各DB製品によってまったくちがいます。 {}をつけないとJDBCドライバがSQLの方言の差異を吸収してしまい。ストアドの場合は思わぬ誤動作を起こすことがあります。 ですから、このSQL文は最適化せずにそのままDBまで届けてくださいよという{}があったほうがよいです。

masae-
質問者

お礼

ご丁寧な回答ありがとうございました。 当初はつけないというくくりだったため、危ないところでした。 今後ともよろしくお願いいたします。 ありがとうございました。

関連するQ&A