ORA-24816の対処。
今日、初めて見た。事象と対処法だけメモ。
事象
BLOB列とVARCHAR2(4000)列を持つAテーブルに、それぞれ最大サイズのデータをINSERTしようとしたところ、ORA-24816発生。
ORA-24816: 実際のLONGまたはLOB列の後に、指定されたLONG以外のバインド・データが拡張されました
閾値は見てないけど、こんな感じで事象再現。
・BLOB列:8000バイト、VARCHAR2(4000)列:4000バイトだと再現
・BLOB列:1000バイト、VARCHAR2(4000)列:4000バイトだと再現しない
・BLOB列:8000バイト、VARCHAR2(4000)列:1000バイトだと再現しない
対処法
回避方法は、INSERT、UPDATEのカラム順をLOB型を最後に配置するようにすると成功したと書かれていました。
とりあえず検証したところ、問題なく登録できましたしました。。#ORA-24816
insert into TABLE01(data2, title, data1, id)values(?, ?, ?, ?)
#成功
insert into TABLE01(id, title, data1, data2)values(?, ?, ?, ?)
(UPDATEも同様に成功)
Oracle Technology Network (OTN) Japan - 掲示板 : ORA-24816: ...
ホントかよ、と疑いながらBLOB列を後ろにしたら解決。
S2JDBCの制約上、一番後ろにはできなかったけどVARCHAR2(4000)列の後ろにしたら再現しなかったので解決ってことで。