1.情景展示

  oracle数据库中,需要根据指定字段内容调用加密程序后,根据主键id进行更新其对应的字段mindex_id的值;

  加密通过Java实现,然后通过Java对其进行更新;

  Java使用的sqlMap框架是ibatis,ibatis结合oracle如何实现批量更新?

ibatis 批量更新(二)_IBATIS

 

2.解决方案

  sqlMap如何写?

1 <!-- 批量更新 -->
2 <update id="updatePRIMARY_INDEX2" parameterClass="java.util.ArrayList">
3 UPDATE PRIMARY_INDEX2 SET MINDEX_ID =
4 <iterate conjunction="" open="CASE ID" close="END">
5 <![CDATA[
6 WHEN #list[].ID# THEN #list[].MINDEX_ID#
7 ]]>
8 </iterate>
9 WHERE ID IN
10 <!-- in()不能超过1000 -->
11 <iterate conjunction="," open="(" close=")">
12 #list[].ID#
13 </iterate>
14 </update>

  相当于oracle中的

1 UPDATE PRIMARY_INDEX2
2 SET MINDEX_ID = CASE ID
3 WHEN '235886' THEN
4 '6'
5 WHEN '235885' THEN
6 '5'
7 WHEN '235884' THEN
8 '4'
9 WHEN '235883' THEN
10 '3'
11 WHEN '235882' THEN
12 '2'
13 WHEN '235881' THEN
14 '1'
15 END
16 WHERE ID IN ('235886', '235885', '235884', '235883', '235882', '235881');

oracle的in()函数有限制,里面的个数不能超过1000个。

2023年1月29日11:03:15

IN()函数使用迭代来实现

<select id="getORGINFOS" parameterClass="map" resultClass="java.util.HashMap">
SELECT ORGCODE,ORGNAME FROM BASE_ORG_INFO T
WHERE ORGCODE IN
<isNotNull property="ORGCODES">
<iterate property="ORGCODES" open="(" close=")" conjunction=",">
<![CDATA[#ORGCODES[]#]]>
</iterate>
</isNotNull>
<isNull property="ORGCODES">
<iterate property="ORGCODE" open="(" close=")" conjunction=",">
<![CDATA[#ORGCODE[]#]]>
</iterate>
</isNull>
</select>

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

作者:​​Marydon