database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
ㆍDB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DB2 Q&A 3016 게시물 읽기
No. 3016
CASE WHEN 이용한 UPDATE 처리시 SQLSTATE=22001오류
작성자
전찬식
작성일
2010-10-18 14:34
조회수
10,668

UPDATE TJEVDABK
SET CUST_NM = (CASE WHEN :cust_nm = '' THEN CUST_NM ELSE :cust_nm END)
WHERE CUST_JUMIN_NO = '770101123456'

위와 같이 데이터를 업데이트 하려고 하는데 입력되는 값이 '' 일경우 기존값으로 처리하려고 합니다.

근데 이 문장을 실행시키면 sqlstate=22001 문자잘림 오류가 발생하네요

어떻해야할까요??

이 글에 대한 댓글이 총 4건 있습니다.

sqlstate 값 말고 sqlcode 값을 알려주시면

함께 고민해보기 더 좋을 것 같네요.

암비님이 2010-10-19 09:03에 작성한 댓글입니다. Edit

SQL Code 없이 이렇게만 나와요. :cust_nm 엔 한글 3글자만 넣었을 뿐인데 이러네요

 ERROR [22001] [IBM] CLI0109E String data right truncation. SQLSTATE=22001

이 쿼리의 목적이 업데이트 하려고 하는 칼럼에 데이터가 없으면 기존에 입력되어 있는 값을 그냥 남겨놓으려고 하는건데

이 쿼리가 안된다면 다른 구현 방법이 있을까요

전찬식님이 2010-10-19 17:39에 작성한 댓글입니다.
이 댓글은 2010-10-19 18:01에 마지막으로 수정되었습니다. Edit

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'

암비님이 2010-10-19 19:26에 작성한 댓글입니다. Edit

암비님 감사합니다. 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';

이렇게 해야 되네요

전찬식님이 2010-10-20 10:00에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
3019Load 씨 메세지 노출 안되도록 할 수 있을까요? [1]
첵띠싸웃
2010-10-27
6982
3018다이나믹 SQL 도움 부탁드려요......
초보
2010-10-22
6230
3017DB2에서 문자열 조합시 + 기호 사용하면 에러가 나는데, 해결방안있으신분, 도움 부탁드립니다. 감사합니다. [2]
김정수
2010-10-22
7128
3016CASE WHEN 이용한 UPDATE 처리시 SQLSTATE=22001오류 [4]
전찬식
2010-10-18
10668
3015mysql 쿼리입니다. DB2로 변형좀 해주면 감사하겠습니다. [2]
왕희원
2010-10-13
7389
3014테이블 CREATE 에러 입니다. 도움 부탁드립니다. [1]
김태원
2010-10-07
8857
3013VARCHAR_FORMAT 질문 입니다. [1]
찌원
2010-10-02
7550
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다