I.はじめに
最近のプロジェクトでは、我々はむしろ奇妙な問題は、私がCLOBの長いテキスト保存MyBatisのバッチを使用したときにエラーが唯一のLONG列に挿入するためにLONG値をバインドすることができたときに、おそらく唯一の挿入するためにバインドする」を意味していることである遭遇しましたさらに驚くべきことにこのエラーが唯一のテスト環境にデプロイする際に遭遇していることであるLONG LONG列の値は、」この問題は、開発環境で発生し、適切に保存、でも2つの環境では、ネットワーク内の同じですしませんでした我々はCLOBを疑われていたデータベースは、長すぎるによるものではないが、通常、開発環境で問題なく保存され、私たちはこの推測をあきらめました。次のようにエラーログは次のとおりです。
そして、あなたのお母さんの波は、いくつかの発言は次のような問題は、バルク保存方法をMyBatisのです見ました:
<insert id="insertPOBatch" parameterType="java.util.List">
insert into ZHXG_ZHCP_HJDFXQB(PKID,XSID,CPHJID,RWID,CPXQXX)
(
<foreach collection="list" item="row" index="index" separator="union all">
(select
#{row.pkid,jdbcType=VARCHAR},
#{row.xsid,jdbcType=VARCHAR},
#{row.cphjid,jdbcType=VARCHAR},
#{row.rwid,jdbcType=VARCHAR},
#{row.cpxqxx,jdbcType=CLOB}
from dual)
</foreach>
)
</insert>
上記のコード、cpxqxxフィールドのClobタイプで、ロングに意志Clobオブジェクトフィールドに摂取した場合、問題の大部分はデュアルからのデータで発見されたと言うことは可能であるが、これだけLONG値がバインドすることができます以下のためのLONG列には、このエラーを挿入します。
第二に、ソリューション
解決のために、私たちはBEGIN..END(ストアドプロシージャの使用などの個人的な感情)を使用することができますが、以下のように、これは、保存されたOracleのMyBatisのバッチのための別の方法です:
<!-- 此处批量插入暂时解决ORA-01461: can bind a LONG value only for insert into a LONG column问题 -->
<insert id="insertPOBatch" parameterType="java.util.List">
begin
<foreach collection="list" item="row" index="index" separator=";">
insert into ZHXG_ZHCP_HJDFXQB(PKID,XSID,CPHJID,RWID,CPXQXX)
values( #{row.pkid,jdbcType=VARCHAR},
#{row.xsid,jdbcType=VARCHAR},
#{row.cphjid,jdbcType=VARCHAR},
#{row.rwid,jdbcType=VARCHAR},
#{row.cpxqxx,jdbcType=CLOB}
)
</foreach>
;end;
</insert>
、覚えておいてください; END;セミコロンの前にして忘れることはできません。精神を保持しようとすると、結果は実際にいくつかの解決策のアイデアや方法を提供し、小型のパートナーのと同じ問題が発生したことを期待して、あなたが再び発生した場合に、それを記録ここに、成功しました。