2017-07-13 2 views
0

次のGroovyでjava.lang.ArrayIndexOutOfBoundsException:-5を取得しています。私はgroovy executeUpdateがArrayIndexOutOfBoundsExceptionをスローする

conn.executeUpdate(
      "UPDATE sc_commit_detail d1\n" + 
        "SET d1.commit_status = ?\n" + 
        "WHERE d1.sc_commit_detail_id IN (" + 
          "SELECT d2.sc_commit_detail_id " + 
          "FROM sc_commit_detail d2 " + 
          "WHERE d2.sc_commit_detail_id = 143661" + 
        ")" 
      ,['APPLIED']) 

はPLで同じクエリをしようとしました(同時に、私はパラメータのみを使用している場合のみそれが動作選択ネストされて、両方ではない)のパラメータを選択入れ子に使用する場合

問題が発生するようです/ sqlとそれは動作します。

(私はパラメータを使用していないので)、これはコードで動作することに注意してください:

conn.executeUpdate(
      "UPDATE sc_commit_detail d1\n" + 
        "SET d1.commit_status = 'APPLIED'\n" + 
        "WHERE d1.sc_commit_detail_id IN (" + 
          "SELECT d2.sc_commit_detail_id " + 
          "FROM sc_commit_detail d2 " + 
          "WHERE d2.sc_commit_detail_id = 143661" + 
        ")" 

     ) 

そしてまた、この(私は選択にネストを使用しないため):

conn.executeUpdate(
      "UPDATE sc_commit_detail d1\n" + 
        "SET d1.commit_status = ?\n" + 
        "WHERE d1.sc_commit_detail_id = 143661", 
      ['APPLIED'] 
     ) 

何私は間違っている?

これは、Oracle DBのためだ、と私は、問題を表示するには、この質問のためにそれを単純化し、私は、ネストされたので、私は問題は、それが実際にjdbc7ドライバのバージョン12.1での既知のバグです見つけ

+0

代わりに ''使用 'のような名前のパラメータを指定してみてください。status'パラメータを '[status: 'APPLIED']として渡します。 –

+0

全く同じエラーを試してみました –

+1

自分の環境で正常に動作し、dbのレコードが更新されました。私は詳細が必要だと思う(コード、スタックトレース、バージョン情報、DB構造)。 –

答えて

0

OKパラメータの両方を使用する必要があります。 0.2.0(および他のいくつかのバージョン)。 ?

jdbc6バージョンを使用すると、それが動作11.2.0.2.0後(誰かがOracleのフォーラムで同じ問題を抱えていたし、このバージョンは彼のために働いていた)

関連する問題