由於需求涉及oracle的clob類型字段,在mybatis的mapper xml文件中編寫merge into語句時總是失敗。
附上錯誤代碼
<insert id="mergeInto">
<selectKey resultType="java.lang.String" order="BEFORE"
keyProperty="id">
SELECT to_char(sysdate,'yyyymmdd')||seq_dr_bcxx.nextval
AS ID FROM dual
</selectKey>
MERGE INTO dr_doc_info doc
USING (SELECT #{cankwxzwtm} cankwxzwtm,
#{zz} zz FROM dual) d
ON (doc.cankwxzwtm = d.cankwxzwtm and doc.zz =
d.zz)
WHEN matched THEN
UPDATE SET doc.MOD_TIME =
#{modTime},doc.UPD_USER = #{updUser}
WHEN not matched THEN
INSERT (
ID,
CKWXLX,
CANKWXBH,
CANKWXZWTM,
CANKWXYWTM,
ZZ,
DYZZXM,
DIYZZDW,
DYZZDZ,
TXZZDZ,
TXZZXM,
TXZZDW,
KANM,
YEAR,
JUAN,
QI,
YEMA,
ZWGJC,
YWGJC,
<!-- zhongwzy, YINGWZY, -->
FUND_TYPE,
FLH,
IS_OPEN,
<!-- CKWXLY, -->
REG_TIME,
MOD_TIME,
MEMO,
CRT_USER,
UPD_USER
)VALUES(
#{id,jdbcType=VARCHAR},
#{ckwxlx,jdbcType=VARCHAR},
#{cankwxbh,jdbcType=VARCHAR},
#{cankwxzwtm,jdbcType=VARCHAR},
#{cankwxywtm,jdbcType=VARCHAR},
#{zz,jdbcType=VARCHAR},
#{dyzzxm,jdbcType=VARCHAR},
#{diyzzdw,jdbcType=VARCHAR},
#{dyzzdz,jdbcType=VARCHAR},
#{txzzdz,jdbcType=VARCHAR},
#{txzzxm,jdbcType=VARCHAR},
#{txzzdw,jdbcType=VARCHAR},
#{kanm,jdbcType=VARCHAR},
#{year,jdbcType=VARCHAR},
#{juan,jdbcType=VARCHAR},
#{qi,jdbcType=VARCHAR},
#{yema,jdbcType=VARCHAR},
#{zwgjc,jdbcType=VARCHAR},
#{ywgjc,jdbcType=VARCHAR},
<!-- #{zhongwzy,jdbcType=CLOB,typeHandler=org.apache.ibatis.type.ClobTypeHandler},
#{yingwzy,jdbcType=CLOB,typeHandler=org.apache.ibatis.type.ClobTypeHandler}, -->
#{fundType,jdbcType=VARCHAR},
#{flh,jdbcType=VARCHAR},
#{isOpen,jdbcType=VARCHAR},
<!-- #{ckwxly,jdbcType=VARCHAR}, -->
#{regTime,jdbcType=TIMESTAMP},
#{modTime,jdbcType=TIMESTAMP},
#{memo,jdbcType=VARCHAR},
#{crtUser,jdbcType=VARCHAR},
#{updUser,jdbcType=VARCHAR}
)
</insert>
主要有三點問題,
1,clob類型的字段比較 要借助函數 dbms_lob.compare() 。
2,clob字段手寫insert入庫失敗(未解決)。
3,借助存儲過程成功了(不想用存儲過程)。
