< update id="batchUpdate">
UPDATE eplus_project_standard
SET device_type_id = contents.device_type_id,
type = contents.type,
project_id = contents.project_id,
summary = contents.summary,
detail = contents.detail,
period_type = contents.period_type,
period_value = contents.period_value,
index = contents.index
FROM (
VALUES
<foreach collection ="standards" item="stand" index="index"
open="" close= "" separator= ",">
(#{stand.deviceType.id},
<trim suffix="::jsonb"> #{stand.standard}</trim >
#{stand.type},
#{stand.projectId},
#{stand.id},
#{stand.summary},
#{stand.detail},
#{stand.periodType},
#{stand.periodValue},
#{stand.index})
</foreach>
contents(device_type_id, standard,type,project_id,id, summary,detail, period_type, period_value, index)
WHERE
contents.id
= eplus_project_standard.id;
</update >
但是有些时候,列的类型为特殊类型。列的value为null,则sql判断不出value应该是什么类型,会抛出错误。我们在sql中指定类型就可以了。
demo:
<update id= "updateBatch">
update ps_fair_places
fair_id=place.fairId,
organization_id=place.orgId,
status=place.status,
current_interviewer=place.currentInterviewerId,
current_participant=place.currentParticipantId,
jobs =place.jobs,
channel=place.channel:: jsonb,
allow=place.allow,
interview_id=place.currentInterviewId,
start_time=place.startTime:: timestamp without time zone,
end_time=place.endTime:: timestamp without time zone
from (
values
<foreach collection ="fairPlaces" item="p" open= "" close =""
separator= ",">
<trim prefix ="(" suffix=")">
#{p.id},
<choose >
<when test ="p.fair != null">#{p.fair.id},</ when>
<otherwise >null, </otherwise>
</choose>
<choose >
<when test ="p.org != null">#{p.org.id},</ when>
<otherwise >null, </otherwise>
</choose>
#{p.status},
<choose >
<when test ="p.currentInterviewer != null">
#{p.currentInterviewer.id},
</when>
<otherwise > null, </otherwise>
</choose>
<choose >
<when test ="p.currentParticipant != null">
#{p.currentParticipant.id},
</when>
<otherwise > null, </otherwise>
</choose>
<choose >
<when test ="p.jobs != null">
<trim prefix ="ARRAY[" suffix= "]">
<foreach collection="p.jobs" item ="job" separator=","> #{job.id}
</foreach>
</trim>
</when>
<otherwise >
null,
</otherwise>
</choose>
<choose >
<when test ="p.channel != null">
#{p.channel},
</when>
<otherwise > null, </otherwise>
</choose>
#{p.allow},
#{p.currentInterviewId},
#{p.startTime},
#{p.endTime}
</trim>
</foreach>
) as place(
fairId,
orgId,
status,
currentInterviewerId,
currentParticipantId,
jobs,
channel,
allow,
currentInterviewId,
startTime,
endTime
where place.id = ps_fair_places.id
</update >