ORA-12899: value too large for column
( ORA-12899: "유저명"."테이블명"."컬럼명" 열에 대한 값이 너무 큼(실제: m, 최대값: n) )
ORA-12899는 INSERT를 한다거나 UPDATE를 하다가 다음과 같은 에러가 발생하는 경우가 있다.
1. 실제로 최대값보다 실제 입력된 값이 커서 발생하는 경우이다.
2. 오라클의 문자셋 NLS_CHARACTERSET의 설정의 문제다 ( 캐릭터셋(charset)의 문제 -> UTF-8 과 ASCII의 Byte 수가 달라 각 3Byte, 2Byte, 1Byte를 계산하다 문제가 생긴 경우)
이번에 포스팅 할 경우는 공백이다.
쉽게 발생하는 케이스가 아니라서,
보통 위의 경우라면 해결방법이 인터넷에 많이 올라와있지만 공백의 경우 찾기도 쉽지 않고 설마 공백이 문제가 될 거라 생각하지 않았다.
대부분 실제 입력 값이 크지 않고 입력되는 값이 모두 영어인 경우라면 다음을 확인해보면 될 것 같다.
3. 공백값 chr(49824)
오라클 공백값이 기존 1byte의 스페이스 키를 입력하여 나온 chr(32) 이다.
하지만 에러가 나는 공백값은 아닌 chr(49824)는 2Byte이다. (공백인듯 공백아닌 공백같은)
두 공백을 비교하면
chr(32) |
chr(49824) |
1Byte trim가능, replace 처리가 스페이스 키로 만든 공백으로 처리 가능 |
2Byte trim불가, replace 처리가 스페이스 키로 만든 공백으로는 불가능 |
가장 쉽게 해결하는 방법은 해당 공백을 복사하여 replace해주는 방법이다.
SELECT REPLACE(CHR(49824), ' ', ' ') FROM DUAL;
이 공백문자를 만들기도 힘든데 어떻게 들어왔는지는 모르겠다.
'데이터베이스 > Oracle' 카테고리의 다른 글
ORA-01460: unimplemented or unreasonable conversion requested (0) | 2015.10.19 |
---|---|
TEMPORARY TABLE (0) | 2015.09.25 |