jdbcでOracle12.2に繋げています。
以下のSQLがあり、select文自体は問題なく実行できます。
このSQLに対してfor updateを使って、データを更新しようとしています。
sql
1select 2 senshu.id, senshu.record, p.avg_record avgrec, 3 senshu.gtime, senshu.record, taikai.course_length, 4 p.avg_pace avgpace, 5 senshu.pace wpace, senshu.pace_avg wavg_pace, 6 senshu.record_avg wavg_rec, 7 senshu.pace_rate, senshu.record_rate 8from 9 taikai, senshu, course_param p 10where 11 taikai.src_file=senshu.src_file 12 and taikai.place=p.place 13 and taikai.course_kind=p.course_kind 14 and taikai.course_length=p.course_length 15 and taikai.course_cond=p.course_cond 16 and taikai.cond=p.cond 17 and taikai.inout=p.inout 18for update
(3つのテーブルを結合していますが、更新対象はsenshuテーブルだけです。)
これを実行すると、以下のエラーが発生します。
rs.updateDouble("wpace", pace); java.sql.SQLException: 読取り専用の結果セットに対する操作が無効です。: updateDouble
コネクション自体はCONCUR_UPDATABLEですし、実際に同じトランザクションで
他のテーブルは更新できているので、このSQL文の発行によって接続が
ダウングレードしているようです。
selectした直後に、ステートメントからSQLWarningを取ってみました。
SQLWarning w = statment.getWarnings();
すると、以下の警告がありました。
Warning: リクエストした型および/または同時実行レベルで結果セットを 作成できません。: ORA-00918: 列の定義が未確定です。
列には全てテーブル名を記述しているので、定義が未確定な部分は
ないと思います。(そもそもfor updateをつけなければ問題なく実行できる
SQL文です)
調べてみたところ、
「リクエストした型および/または同時実行レベルで結果セットを作成できません」
というのはJDBCのエラーメッセージのようですが、どのような場合にこのように
「更新可能の結果セットが作成できない」というようなことがおこるでしょうか。
心当たりとしては
- テーブルを複数(この場合は3つ)結合して得られた結果セットを更新ができない?
- 対象になる行が多すぎる?
などですが、、、、
回答1件
あなたの回答
tips
プレビュー