- - PR -
内部結合をするSQLを一つのコネクション内で複数投げると値がおかしい。
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-07-12 11:45
DB接続(オートコミットfalse)
無限ループ始 SELECT文発行(内部結合を伴う) SELECT文の結果を取得 条件1 UPDATE文発行 コミットorロールバック処理 条件1 無限ループ終 ------------------------------------------------------------ というような処理を作っているのですが、最初のSELECT文が0件で次のループで再びSELECT文で10件取れるはずのところが0件のままだったりします。SQLのシンタックスはプロンプトの上で実際に投げて確認しているので、大丈夫だと思われます。 1回目のループ:10件取得 → UPDATE → コミット 2回目のループ:5件取得 → UPDATE → コミット 3回目のループ:10件取得 ここでなぜか5件しか入ってきません。 で、とりあえず、解決策として内部結合を伴うSELECT文の後にコミット処理を行うと正常に処理されるようになりました。 今のところ自分では、内部結合を伴うSELECT文の後にはコミット処理などを行わないといけないのかなということです。あまりSQLに詳しくないので処理はされているけど、合っているのかわからないので、もしわかるかたいたらよろしくお願いします。 [ メッセージ編集済み 編集者: Tatsuya 編集日時 2007-07-12 12:25 ] | ||||
|
投稿日時: 2007-07-12 12:07
トランザクションの開始処理がないからとか? | ||||
|
投稿日時: 2007-07-12 12:24
tkrnさん
返答ありがとうございます。 コミットなり、ロールバック処理をしていないからと言うことでしょうか? | ||||
|
投稿日時: 2007-07-12 13:14
いえ、このフローでループの最後にコミットorロールバック処理が含まれていますが、 ループの最初にトランザクションの開始処理が書かれていなかったので気になりました。 | ||||
|
投稿日時: 2007-07-12 13:19
いつの間にやら、条件1が追加されてる… ![]() トランザクションの開始処理とコミットorロールバック処理が一対になっているか確認されてみてはどうでしょうか? | ||||
|
投稿日時: 2007-07-12 22:56
あの、会議室間違いでなければJavaでの話をしてるんですよね?
だとするとJavaのソースを見せてもらわないと皆さん回答しづらいんじゃ ないでしょうか?提示されている情報がSQLでもJavaでも無いんでは、 SQLが間違っているのか、Javaのコーディングが間違っているのか 検討付かないですよ。 | ||||
|
投稿日時: 2007-07-13 07:27
たぶん、O/RMを利用したJAVAかとおもわれる。
|
1