데이터 형식 int(으)로 변환하는 중 산술 오버플로 오류가 발생했습니다.
2011. 10. 28. 13:45
분명 int형이 아닌 varchar형으로 값을 받아왔는데도 불구하고,
프로시저를 실행시켰을 때,
데이터 형식 int(으)로 변환하는 중 산술 오버플로 오류가 발생했습니다.
라는 오류가 발생하여 며칠을 고생했다..
간단하게 표현하면 다음과 같은 로직..
Create PROCEDURE [dbo].[프로시저 명]
@start VARCHAR(255),
@end VARCHAR(255) -- 시작 값과 끝 값을 varchar로 받는다..
while (@start <= @end) --시작 값이 마지막 값과 같아질 때까지 돌자.
Insert into 테이블명 (시작값 )
values (@start ) --지정한 테이블에 시작 값 입력..
Set @start = @start + 1 --시작 값에 +1 추가
이런식으로 아무 문제없이 작동하던 프로시저가 난관에 봉착..
받아와야 하는 시작 값이 24136965000, 마지막 값이 24136965010 이 되자,
데이터 형식 int(으)로 변환하는 중 산술 오버플로 오류가 발생했습니다.
라는 오류를 뱉어내는 것이다..
DB에서 실행하면 그나마 중지라도 시키지..
웹상에서 실행되면 무한으로 돌며 중지도 안되고,
결국, 실 DB서버 CPU를 100%를 만들어버리는 어처구니 없는 일이 발생..
웹상에서 실행되면 무한으로 돌며 중지도 안되고,
결국, 실 DB서버 CPU를 100%를 만들어버리는 어처구니 없는 일이 발생..
뭐지? 뭐지? 난 int형을 받지 않았는데??
그래서 먼저 int형에 대해 확인 했다..
- 2147483648 ~ 2147483647 (int형의 범위)
내가 등록하려는 값이 int형 범위를 벗어나긴 했다..
그래? 그럼 Bigint 형 쓰면 깔끔하게 해결되네..?
맞다.. 헌데, 받아오는 값이 '0'으로 시작할 때가 있어서 이것도 답이 되진 못했고..
암튼, 이런저런 삽질을 하다가
Set @start = @start + 1 -> 이 구문을 다음과 같이 변경..
Set @start = convert(bigint, @start) + 1
미션 해결..
아직도 varchar로 받은 값이 while 문을 돌며 int형으로 잡히는지 모르겠지만,
이런식의 해결도 있으니 참고하면 좋을 듯..
'일상에서' 카테고리의 다른 글
다음팟인코더 - 모토로라_디파이 : 인코딩 설정 값.. (0) | 2011.11.07 |
---|---|
알리미 기능을 댓글 옆으로 옮겨주세요.. (2) | 2011.11.03 |
SK 전 감독, 김성근 강연을 듣고.. (0) | 2011.10.28 |
디파이(MB525) - 신청에서 수령 및 교환까지 수난(?)사.. (2) | 2011.06.20 |
일본 캔맥주 몇가지.. (0) | 2011.06.19 |