UPDATE TJEVDABK SET CUST_NM = (CASE WHEN :cust_nm = '' THEN CUST_NM ELSE :cust_nm END) WHERE CUST_JUMIN_NO = '770101123456'
위와 같이 데이터를 업데이트 하려고 하는데 입력되는 값이 '' 일경우 기존값으로 처리하려고 합니다.
근데 이 문장을 실행시키면 sqlstate=22001 문자잘림 오류가 발생하네요
어떻해야할까요??
sqlstate 값 말고 sqlcode 값을 알려주시면
함께 고민해보기 더 좋을 것 같네요.
SQL Code 없이 이렇게만 나와요. :cust_nm 엔 한글 3글자만 넣었을 뿐인데 이러네요
ERROR [22001] [IBM] CLI0109E String data right truncation. SQLSTATE=22001
이 쿼리의 목적이 업데이트 하려고 하는 칼럼에 데이터가 없으면 기존에 입력되어 있는 값을 그냥 남겨놓으려고 하는건데
이 쿼리가 안된다면 다른 구현 방법이 있을까요
DB2가 변수에 대해 간혹 자릿수에 대한 적용이 애매한 경우가 있더군요.
무의미한 구문이므로 가장 좋은 것은 변수의 상황에 따라 해당 루틴 자체를 수행하지 않도록 하는게 좋고요.
다른값과 함께 처리하기에 그게 힘들다면, CAST 함수를 이용하여 변수의 자릿수를 확정주어 주는 방법이 있습니다.
UPDATE TJEVDABK SET CUST_NM = CAST(CASE WHEN :cust_nm = '' THEN CUST_NM ELSE :cust_nm END AS VARCHAR(20)) WHERE CUST_JUMIN_NO = '770101123456'
암비님 감사합니다. cast 처리하니 수정이 되네요
UPDATE TJEVDABK
SET CUST_NM = (CASE WHEN CAST(:cust_nm AS VARCHAR(20) = '' THEN CUST_NM ELSE :cust_nm END)
WHERE CUST_JUMIN_NO = '770101123456';
이렇게 해야 되네요