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

+ Recent posts