update t_user
set user_nm = COALESCE(#{user_nm}, user_nm) // column parameter type : varchar
, task_id = COALESCE(#{task_id}, task_id) // column parameter type : int
where user_id = #{user_id}
result : coalesce error // parameter type이 맞지 않는 오류,
task_id 는 int이지만 값이 없을 경우 #{task_id}는 ''로 찍히기 때문에 ''를 값으로 인정하고 넣으려고 하기 떄문에 parameter type error가 발생한다.
solution
update t_user
set user_nm = COALESCE(#{user_nm}, user_nm)
<if test="task_id != null and task_id != '' ">
, task_id = #{task_id}
</if>
where user_id = #{user_id}
null이나 ''값이 들어왔을 경우 실행하지 않는 조건을 걸어준다.