mybatis 使用oracle merge into 語句踩坑實錄


由於需求涉及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,借助存儲過程成功了(不想用存儲過程)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM