![]() |
Photo by 傅甬 华 on Unsplash |
quoteCharacter?
구분자(Delimiter)로 필드 값을 구분하는 경우를 생각해보자. 만약 필드 값에 구분자나 줄바꿈 문자가 들어 있다면 이를 필드 값에 넣어줄 수 있는 방법이 없다. 이 때 필요한 것이 quoteCharacter 문자다. Spring Batch는 quoteCharacter로 감싸진 문자열은 모두 하나의 필드 값으로 처리한다. 기본 값은 큰따옴표(“)이며, 변경할 수 있다.
불청객 큰따옴표(“)
구분자(Delimiter)로 필드 값을 구분하는 파일에 저장된 데이터를 DB에 인서트하는 경우를 생각해 보자. 일반적인 경우라면 정상적으로 인서트가 수행될 것이다. 만약 의도치 않은 큰따옴표가 들어 있는 경우라면 어떻게 될까? 오라클 DB의 경우 3가지 동작을 한다.
큰따옴표로 묶인 필드 값이 테이블 컬럼의 자릿수 보다 작을 때
- 필드 값은 아무 이상없이 인서트 된다.
큰따옴표로 묶인 필드 값이 테이블 컬럼의 자릿수 보다 크고, JDBC 드라이버의 VARCHAR limit 보다 작을 때
- [ORA-12899: Value too large for column]이 발생한다. 당연한 결과다.
큰따옴표로 묶인 필드 값이 JDBC 드라이버의 VARCHAR limit 보다 클 때
- [ORA-01461: can bind a LONG value only for insert into a LONG column]이 발생한다.
- setString() 메소드를 이용하면 JDBC 드라이버가 LONGVARCHAR로 변환하여 데이터베이스로 보내기 때문이다.
주의하자.
스프링 배치를 쓰다가 뜬금없는 ORA-01461 에러가 발생한다면, quoteCharacter 때문은 아닌지 생각해보자.
환경
Spring 2.5.6, Spring Batch 1.1.4에서 발생했다.