Update문을 Static SQL로 구성하기 어려운 것은 Parameter Binding을 사용하기 어렵기 때문이다. 보통 Update는 전체 Column에 이루어지지 않고 달라진 하나 또는 두개의 Column에만 이루어 지기 때문이다.
즉, 아래와 같은 방식은 통하지 않는다.
Where pk_column = :v3
그렇다고 Dynamic SQL이 정당화 될 수는 없지 않겠는가? 바로 앞 포스트에서 알아 본 Case When문과 약간의 Idea를 이용하면 간단하게 해결할 수 있다.
- Update 할 내용이 없는 경우는 원래 값으로 Update를 해준다.
- Update할 내용이 있는지 없는지 여부는 Varchar2계열이라면 Length를 Check하면 되고, 숫자라면 전혀 올 수 없는 값을 주면 될 것이다.
- 미리 정해진 값이 있다면 입력값에 따라 처리할 수 있다.(ex : sysdate)
이제 Idea를 조합해보자.
Set column1 = (case when Length(:v1) > 0 then :v1 else column1 end),
Set column2 = (case when :v2 = ‘today’ then sysdate else column2 end)
Where pk_column = :v3
알고 보면 간단한 Update문의 Static SQL 처리였다.
|

댓글을 달아 주세요