티스토리 뷰
반응형
예전에 데이터베이스 사랑넷에서 dbload를 사용해서 특정 형식의 datetime 데이터를 입력하는 방법에 대해 답변한 적이 있는데 IBM Community에도 질문이 올라왔네요. 블로그에도 정리할 겸 올려봅니다.
먼저 입력하려는 데이터 형식은 '2019.10.03 05:24:24' 이런 식입니다.
인포믹스에서 기본 datetime 포맷을 살펴보면 아래와 같습니다.
[informix@db2 ids1410fc3]$ echo "select current::datetime year to second " | dbaccess stores_demo
Database selected.
(expression)
2020-07-09 20:51:26
기본 포맷이 저렇게 표시되다보니 dbload로 데이터를 입력하면 아래와 같이 오류가 발생합니다.
-- 테스트용 테이블 스키마
[informix@db2 ids1410fc3]$ dbschema -d stores_demo -t test
create table "informix".test
(
v1 char(10),
dt datetime year to second
);
-- 테스트용 테이블에 입력할 데이터
[informix@db2 ids1410fc3]$ cat test.unl
|2019.10.03 05:24:24|
-- dbload 실행에 사용할 커맨드 파일
[informix@db2 ids1410fc3]$ cat test.cmd
FILE test.unl DELIMITER '|' 2;
-- dbload 실행 결과
[informix@db2 ids1410fc3]$ dbload -d stores_demo -c test.cmd -l errlog
DBLOAD Load Utility INFORMIX-SQL Version 14.10.FC3
In INSERT statement number 1 of raw data file test.unl.
Row number 1 is bad.
|2019.10.03 05:24:24|
Input does not match format specification.
Table test had 0 row(s) loaded into it.
저렇게 포맷이 맞지 않다고 1277 오류가 발생하네요.
과거에 제가 답변한 내용이 있어서 쉽게 해결할 수 있었습니다.
dbload 실행전에 GL_DATETIME과 USE_DTENV 환경변수를 설정하면 오류 없이 잘 실행됩니다. 각 환경변수에 대한 설명은 아래에 나와 있는데, 각 환경변수를 설정하더라도 실제로 데이터가 사용자가 지정한 형식으로 저장되는 것은 아니고 보여지는 형식만 바뀌는 것이라고 합니다.
그래서 GL_DATETIME과 USE_DTENV를 설정하고 다시 dbload를 실행한 결과입니다.
[informix@db2 ids1410fc3]$ export GL_DATETIME="%Y.%m.%d %H:%M:%S"
[informix@db2 ids1410fc3]$ export USE_DTENV=1
[informix@db2 ids1410fc3]$ dbload -d stores_demo -c test.cmd -l errlog
DBLOAD Load Utility INFORMIX-SQL Version 14.10.FC3
Table test had 1 row(s) loaded into it.
반응형
댓글
링크
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday